| from PyQt5.QtCore import ( |
| pyqtSlot, |
| QRunnable, |
| pyqtSignal, |
| pyqtSlot, |
| ) |
| from PyQt5.QtCore import QObject |
| import traceback |
| import sys |
|
|
|
|
| class WorkerSignals(QObject): |
| finished = pyqtSignal() |
| error = pyqtSignal(tuple) |
| result = pyqtSignal(object) |
|
|
|
|
| class ImageGeneratorWorker(QRunnable): |
| def __init__(self, fn, *args, **kwargs): |
| super(ImageGeneratorWorker, self).__init__() |
| self.fn = fn |
| self.args = args |
| self.kwargs = kwargs |
| self.signals = WorkerSignals() |
|
|
| @pyqtSlot() |
| def run(self): |
| try: |
| result = self.fn(*self.args, **self.kwargs) |
| except: |
| traceback.print_exc() |
| exctype, value = sys.exc_info()[:2] |
| self.signals.error.emit((exctype, value, traceback.format_exc())) |
| else: |
| self.signals.result.emit(result) |
| finally: |
| self.signals.finished.emit() |
|
|