def createThread(self, worker: QObject, workerFunction, *onfinish): self.threads.append(QThread()) self.workers.append(worker) thread: QThread thread = self.threads[-1] worker = self.workers[-1] worker.moveToThread(thread) thread.started.connect(workerFunction) for f in onfinish: worker.finished.connect(f) worker.finished.connect(lambda: print("Worker Finished")) worker.finished.connect(thread.quit) worker.finished.connect(thread.exit) thread.finished.connect(worker.deleteLater) thread.finished.connect(thread.deleteLater) thread.start() return thread
class QtSlot(Slot): """Qt direct slot, execute the call inside the qt-event-loop.""" def __init__(self, *args, **kwargs): super().__init__(*args, **kwargs) # Create a QObject and move it to mainloop thread self._invoker = QObject() self._invoker.moveToThread(QApplication.instance().thread()) self._invoker.customEvent = self._custom_event def call(self, *args, **kwargs): QApplication.instance().sendEvent(self._invoker, self._event(*args, **kwargs)) def _event(self, *args, **kwargs): return QSlotEvent(self._reference, *args, **kwargs) def _custom_event(self, event): super().call(*event.args, **event.kwargs)
class QtSlot(Slot): """Qt-safe synchronous slot, execute the call inside the qt-event-loop.""" def __init__(self, *args, **kwargs): super().__init__(*args, **kwargs) # Create a QObject and move it to mainloop thread self._invoker = QObject() self._invoker.moveToThread(QApplication.instance().thread()) self._invoker.customEvent = self._custom_event def call(self, *args, **kwargs): QApplication.instance().sendEvent(self._invoker, self._event(*args, **kwargs)) def _event(self, *args, **kwargs): return QSlotEvent(self._reference, *args, **kwargs) def _custom_event(self, event): super().call(*event.args, **event.kwargs)