使用PyQt中的QThread类实现多线程使用PyQt中的pyqtSignal类实现信息的触发和捕获,即定义事件和订阅事件方法一使用QThread类实现多线程,新建一个python类,继承自QThreadfromPyQt5.QtCoreimportQThreadclassSubThread(QThread):2、重写__init__()、__del__()和run()函数fromPyQt5.QtCoreimportQThreadclassSubThread(QThread):def__init__(self):super().__init__()#在下方添加需要的代码def__del__(self):self.wait()defrun(self):#在下方添加子线程执行的代码3,实例化继承自QThread类,然后调用实例对象的start()函数。新开一个线程【重点】QThread子类的实例必须放在app=QtWidgets.QApplication(sys.argv)和sys.exit(app.exec_())的代码之间。if__name__=='__main__':app=QtWidgets.QApplication(sys.argv)subthread=SubThread()subthread.start()sys.exit(app.exec_())使用pyqtSignal类实现信息触发捕获方法一,在类的头部定义pyqtSignal属性,记住,是类级别的属性fromPyQt5.QtCoreimportQThread,pyqtSignalclassSubThread(QThread):messagetrigger=pyqtSignal(str)def__init__(self):super().__init__()#在下面添加需要的代码def__del__(self):self.wait()defrun(self):#在下面添加子线程执行的代码2,在需要触发信息的地方使用,以及调用pyqtSignalemit()函数触发消息importtimefromPyQt5.QtCoreimportQThread,pyqtSignal,QObjectclassSubThread(QThread):messagetrigger=pyqtSignal(str)def__init__(self):super().__init__()def__del__(self):self.wait()defrun(self):self.messagetrigger.emit('子线程开始')time.sleep(2)self.messagetrigger.emit('子线程结束')3、捕获消息,使用pyqtSignal的connect()连接回调函数,在回调函数中处理捕获的信息,完整代码如下:)def__init__(self):super().__init__()def__del__(self):self.wait()defrun(self):self.messagetrigger.emit('子线程开始')time.sleep(2)self.messagetrigger.emit('子线程结束')defcallback(msg):print(msg)if__name__=='__main__':app=Qt小部件。QApplication(sys.argv)subthread=SubThread()subthread.messagetrigger.connect(回调)subthread.start()sys.exit(app.exec_())
