import abc from PyQt6.QtWidgets import QWidget, QDialog, QDialogButtonBox from PyQt6.QtGui import QPixmap, QImage, QColor, QPainter, QPen from PyQt6.QtCore import Qt, QPoint, QThread class ImageParameterDialog(QDialog): def __init__(self, image, worker_factory): super().__init__() self._image = image self.last_processed = image self.worker_factory = worker_factory self.setup_worker() self.button_box = QDialogButtonBox(QDialogButtonBox.StandardButton.Ok | QDialogButtonBox.StandardButton.Cancel) self.button_box.accepted.connect(self.accept) self.button_box.rejected.connect(self.reject) def setup_worker(self): self.worker = self.worker_factory(self._image, self.process_image) self.worker.result_ready.connect(self._update_last_processed) self.update_values_signal = self.worker.update_values self.update_values_signal.connect(self.worker.process_image) self.worker.start() def _update_last_processed(self, new_image): self.last_processed = new_image def _on_accepted(self): self.worker.stop() self.accept() # @abc.abstractmethod def process_image(self,image, values): pass def result_ready(self): return self.worker.result_ready def send_to_process(self, values): self.update_values_signal.emit(values) def set_accept_enable(self, value): self.button_box.button(QDialogButtonBox.StandardButton.Ok).setEnabled(value) @classmethod def dialog_name(cls): return cls.__name__ @classmethod def dialog_icon(cls): return None