|
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() |
|
|