示例#1
0
    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
示例#2
0
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)
示例#3
0
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)