New pipeline widget framework

This commit is contained in:
2025-08-01 18:49:27 +02:00
parent af4371ebe4
commit 8b4105a261
9 changed files with 304 additions and 191 deletions

View File

@ -2,20 +2,21 @@ import dearpygui.dearpygui as dpg
from PIL import Image
import numpy as np
from .base_widget import BaseWidget
from .pipeline_stage_widget import PipelineStageWidget
class OpenImageWidget(BaseWidget):
name: str = "Open Image"
class OpenImageWidget(PipelineStageWidget):
name = "Open Image"
register = True
has_pipeline_in = False
has_pipeline_out = True
def __init__(self, manager, logger, stage_out="loaded_image"):
super().__init__(manager, logger)
self.stage_out = stage_out
def __init__(self, manager, logger):
super().__init__(manager, logger, default_stage_out="opened_image")
self.dialog_tag = dpg.generate_uuid()
self.output_tag = dpg.generate_uuid()
def create(self):
def create_pipeline_stage_content(self):
with dpg.file_dialog(
directory_selector=False,
show=False,
@ -25,24 +26,12 @@ class OpenImageWidget(BaseWidget):
width=400,
):
dpg.add_file_extension(".*")
with dpg.window(
label="Open Image File",
tag=self.window_tag,
width=300,
height=150,
on_close=self._on_window_close,
):
dpg.add_input_text(label="Stage Output Name", tag=self.output_tag)
dpg.add_button(label="Open File...", callback=self._on_open_file)
dpg.set_value(self.output_tag, self.stage_out)
dpg.add_button(label="Open File...", callback=self._on_open_file)
def _on_open_file(self):
dpg.configure_item(self.dialog_tag, show=True)
def _on_file_selected(self, sender, app_data):
# app_data[0] is dict with selected file paths
selection = (
f"{app_data['current_path']}/{list(app_data['selections'].keys())[0]}"
if isinstance(app_data, dict)
@ -55,6 +44,6 @@ class OpenImageWidget(BaseWidget):
img = Image.open(selection).convert("RGBA")
arr = np.asarray(img).astype(np.float32) / 255.0 # normalize to [0,1]
# Publish into pipeline
self.manager.pipeline.add_stage(dpg.get_value(self.output_tag), arr)
self.manager.pipeline.publish(self.pipeline_stage_out_id, arr)
except Exception as e:
self.logger.error(f"Failed to load image {selection}: {e}")