利用PyQt中的QThread类实现多线程
- 用PyQt中的QThread类实现多线程
- 利用PyQt中的pyqtSignal类实现信息的触发和捕获,即定义事件和订阅事件
利用QThread类实现多线程的方法
1,新建一个python类,继承自QThread
fromPyQt5.QtCoreimportQThread classSubThread(QThread):
2,重写__init__(),__del__()和run()函数
fromPyQt5.QtCoreimportQThread classSubThread(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类实现信息触发和捕获的方法
1,在类内头部定义pyqtSignal属性,记住,是类级别属性
fromPyQt5.QtCoreimportQThread,pyqtSignal classSubThread(QThread): messagetrigger=pyqtSignal(str) def__init__(self): super().__init__() #以下加入需要的代码 def__del__(self): self.wait() defrun(self): #以下加入子线程执行的代码
2,在需要触发信息的地方使用,调用pyqtSignal的emit()函数触发消息
importtimefromPyQt5.QtCore importQThread,pyqtSignal,QObject classSubThread(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()连接回调函数,在回调函数内处理捕获到的信息,完整代码如下:
importsysimporttimefromPyQt5.QtCore importQThread,pyqtSignal,QObject fromPyQt5importQtWidgets classSubThread(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('子线程结束') defcallback(msg): print(msg) if__name__=='__main__': app=QtWidgets.QApplication(sys.argv) subthread=SubThread() subthread.messagetrigger.connect(callback) subthread.start() sys.exit(app.exec_())
以上就是本文的全部内容了,希望对大家学习python能够有所帮助
声明:本文内容来源于网络,版权归原作者所有,内容由互联网用户自发贡献自行上传,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任。如果您发现有涉嫌版权的内容,欢迎发送邮件至:czq8825#qq.com(发邮件时,请将#更换为@)进行举报,并提供相关证据,一经查实,本站将立刻删除涉嫌侵权内容。