from PyQt6.QtWidgets import QFileDialog, QWidget, QToolBar, QVBoxLayout, QPushButton from PyQt6.QtGui import QIcon from PyQt6.QtCore import pyqtSignal import numpy as np from dialogs import DIALOGS DIALOG_PROPERTY = "dialog" class DialogsPanel(QWidget): result_ready = pyqtSignal(np.ndarray) def __init__(self, image_manager): super().__init__() self.mgr = image_manager self.dialog_buttons = [] layout = QVBoxLayout() self.setLayout(layout) for DIALOG in DIALOGS: btn = QPushButton(DIALOG.dialog_name(), self) btn.setProperty(DIALOG_PROPERTY, DIALOG) btn.clicked.connect(self.open_dialog) self.dialog_buttons.append(btn) layout.addWidget(btn) def open_dialog(self): dialog_factory = self.sender().property(DIALOG_PROPERTY) self.dialog = dialog_factory(self.mgr.image()) self.dialog.result_ready().connect(lambda img : self.result_ready.emit(img)) self.dialog.accepted.connect(self.on_accepted) self.dialog.rejected.connect(self.on_rejected) self.dialog.exec() def on_accepted(self): self.mgr.update(self.dialog.last_processed) self.dialog = None def on_rejected(self): self.mgr.refresh()