pyqt5线程跨调用对象怎么实现

avatar
作者
猴君
阅读量:9

在PyQt5中,要实现跨线程调用对象,可以使用QMetaObject.invokeMethod()方法。这个方法可以在指定的对象上调用一个槽函数,并将参数传递给它。

下面是一个示例,演示了如何在PyQt5中实现线程间的跨调用对象:

from PyQt5.QtCore import QObject, QThread, pyqtSignal, pyqtSlot, QMetaObject from PyQt5.QtWidgets import QApplication  # 子线程类 class Worker(QThread):     def __init__(self):         super().__init__()      def run(self):         # 模拟耗时操作         self.sleep(5)                  # 发送信号通知主线程         self.emitSignal.emit('Hello from worker thread')  # 主线程类 class MainWindow(QObject):     emitSignal = pyqtSignal(str)      def __init__(self):         super().__init__()      @pyqtSlot(str)     def onEmitSignal(self, msg):         print(msg)      def startWorkerThread(self):         self.worker = Worker()         self.worker.emitSignal.connect(self.onEmitSignal)         self.worker.start()  if __name__ == '__main__':     app = QApplication([])     mainWindow = MainWindow()      # 在主线程中调用子线程的槽函数     QMetaObject.invokeMethod(mainWindow, 'startWorkerThread', Qt.QueuedConnection)      app.exec_() 

在这个示例中,Worker类表示一个子线程,MainWindow类表示主线程。在Worker类中,使用emitSignal信号向主线程发送消息。在MainWindow类中,使用onEmitSignal槽函数接收并处理这个消息。

在主线程中,我们使用QMetaObject.invokeMethod()方法调用startWorkerThread槽函数,并指定连接类型为Qt.QueuedConnection,表示在主线程的事件循环中调用这个槽函数。

当子线程完成耗时操作后,会发射emitSignal信号,然后这个信号会被连接到主线程的onEmitSignal槽函数,从而实现了线程间的跨调用对象。

广告一刻

为您即时展示最新活动产品广告消息,让您随时掌握产品活动新动态!