Added log widget
This commit is contained in:
53
negstation/widgets/log_widget.py
Normal file
53
negstation/widgets/log_widget.py
Normal file
@ -0,0 +1,53 @@
|
||||
import dearpygui.dearpygui as dpg
|
||||
import logging
|
||||
from .base_widget import BaseWidget
|
||||
|
||||
|
||||
class DPGLogHandler(logging.Handler):
|
||||
def __init__(self, callback):
|
||||
super().__init__()
|
||||
self.callback = callback
|
||||
|
||||
def emit(self, record):
|
||||
msg = self.format(record)
|
||||
self.callback(msg)
|
||||
|
||||
|
||||
class LogWindowWidget(BaseWidget):
|
||||
name = "Log Window"
|
||||
register = True
|
||||
|
||||
def __init__(self, manager, logger):
|
||||
super().__init__(manager, logger)
|
||||
self.initialized = False
|
||||
self.log_tag = dpg.generate_uuid()
|
||||
self.log_lines = []
|
||||
|
||||
# Create and attach handler
|
||||
self.handler = DPGLogHandler(self._on_log)
|
||||
self.handler.setFormatter(logging.Formatter(
|
||||
'%(asctime)s [%(levelname)s] %(message)s'))
|
||||
self.logger.addHandler(self.handler)
|
||||
|
||||
def create_content(self):
|
||||
dpg.add_text("Live Log Output")
|
||||
dpg.add_separator()
|
||||
dpg.add_child_window(tag=self.log_tag, autosize_x=True,
|
||||
autosize_y=True, horizontal_scrollbar=True)
|
||||
self.initialized = True
|
||||
|
||||
def _on_log(self, msg: str):
|
||||
self.log_lines.append(msg)
|
||||
if self.initialized:
|
||||
dpg.add_text(msg, parent=self.log_tag)
|
||||
dpg.set_y_scroll(self.log_tag, dpg.get_y_scroll_max(self.log_tag))
|
||||
|
||||
def on_resize(self, width: int, height: int):
|
||||
# Optional: could resize child window here if needed
|
||||
pass
|
||||
|
||||
def _on_window_close(self):
|
||||
if self.initialized:
|
||||
self.logger.removeHandler(self.handler)
|
||||
self.handler = None
|
||||
super()._on_window_close()
|
@ -39,6 +39,9 @@ class OpenRawWidget(PipelineStageWidget):
|
||||
"four_color_rgb": False,
|
||||
}
|
||||
|
||||
def get_config(self):
|
||||
return {}
|
||||
|
||||
def create_pipeline_stage_content(self):
|
||||
with dpg.file_dialog(
|
||||
directory_selector=False,
|
||||
@ -140,7 +143,7 @@ class OpenRawWidget(PipelineStageWidget):
|
||||
"four_color_rgb", a)
|
||||
)
|
||||
|
||||
with dpg.group(tag=self.busy_group):
|
||||
with dpg.group(tag=self.busy_group, show=False):
|
||||
dpg.add_text("Processing...")
|
||||
|
||||
def _on_open_file(self):
|
||||
|
Reference in New Issue
Block a user