New design
This commit is contained in:
59
negstation/widgets/open_image_widget.py
Normal file
59
negstation/widgets/open_image_widget.py
Normal file
@ -0,0 +1,59 @@
|
||||
import dearpygui.dearpygui as dpg
|
||||
from PIL import Image
|
||||
import numpy as np
|
||||
|
||||
from .base_widget import BaseWidget
|
||||
|
||||
|
||||
class OpenImageWidget(BaseWidget):
|
||||
name: str = "Open Image"
|
||||
|
||||
def __init__(self, manager, logger, stage_out="loaded_image"):
|
||||
super().__init__(manager, logger)
|
||||
self.stage_out = stage_out
|
||||
self.dialog_tag = dpg.generate_uuid()
|
||||
self.output_tag = dpg.generate_uuid()
|
||||
|
||||
def create(self):
|
||||
with dpg.file_dialog(
|
||||
directory_selector=False,
|
||||
show=False,
|
||||
callback=self._on_file_selected,
|
||||
tag=self.dialog_tag,
|
||||
height=300,
|
||||
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)
|
||||
|
||||
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)
|
||||
else None
|
||||
)
|
||||
if not selection:
|
||||
return
|
||||
self.logger.info(f"Selected file '{selection}'")
|
||||
try:
|
||||
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)
|
||||
except Exception as e:
|
||||
self.logger.error(f"Failed to load image {selection}: {e}")
|
Reference in New Issue
Block a user