Worker2.py 984 B

123456789101112131415161718192021222324252627282930313233
  1. from PyQt6.QtCore import QObject,pyqtSlot,QRunnable
  2. import sys
  3. import traceback
  4. from PyQt6 import QtCore
  5. class WorkerSignals(QObject):
  6. finished = QtCore.pyqtSignal()
  7. error = QtCore.pyqtSignal(tuple)
  8. result = QtCore.pyqtSignal(object)
  9. class Worker2(QRunnable):
  10. def __init__(self, fn, *args, **kwargs):
  11. super(Worker2, self).__init__()
  12. # Store constructor arguments (re-used for processing)
  13. self.fn = fn
  14. self.args = args
  15. self.kwargs = kwargs
  16. self.signals = WorkerSignals()
  17. @pyqtSlot()
  18. def run(self):
  19. try:
  20. result = self.fn(*self.args, **self.kwargs)
  21. except Exception:
  22. traceback.print_exc()
  23. exctype, value = sys.exc_info()[:2]
  24. self.signals.error.emit((exctype, value, traceback.format_exc()))
  25. else:
  26. self.signals.result.emit(result) # Return the result of the processing
  27. finally:
  28. self.signals.finished.emit()