这篇文章主要介绍了如何利用PyQt中的QThread类实现多线程,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。
用PyQt中的QThread类实现多线程
利用PyQt中的pyqtSignal类实现信息的触发和捕获,即定义事件和订阅事件
利用QThread类实现多线程的方法
1,新建一个python类,继承自QThread
from PyQt5.QtCore import QThread
class SubThread(QThread):
2,重写__init__(),__del__()和run()函数
from PyQt5.QtCore import QThread
class SubThread(QThread):
def __init__(self):
super().__init__()
# 以下加入需要的代码
def __del__(self):
self.wait()
def run(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属性,记住,是类级别属性
from PyQt5.QtCore import QThread, pyqtSignal
class SubThread(QThread):
messagetrigger = pyqtSignal(str)
def __init__(self):
super().__init__()
# 以下加入需要的代码
def __del__(self):
self.wait()
def run(self):
# 以下加入子线程执行的代码
2,在需要触发信息的地方使用,调用pyqtSignal的emit()函数触发消息
import timefrom PyQt5.QtCore
import QThread, pyqtSignal, QObject
class SubThread(QThread):
messagetrigger = pyqtSignal(str)
def __init__(self):
super().__init__()
def __del__(self):
self.wait()
def run(self):
self.messagetrigger.emit('子线程开始')
time.sleep(2)
self.messagetrigger.emit('子线程结束')
3,捕获消息,使用pyqtSignal的connect()连接回调函数,在回调函数内处理捕获到的信息,完整代码如下:
import sysimport timefrom PyQt5.QtCore
import QThread, pyqtSignal, QObject
from PyQt5 import QtWidgets
class SubThread(QThread):
messagetrigger = pyqtSignal(str)
def __init__(self):
super().__init__()
def __del__(self):
self.wait()
def run(self):
self.messagetrigger.emit('子线程开始')
time.sleep(2)
self.messagetrigger.emit('子线程结束')
def callback(msg):
print(msg)
if __name__ == '__main__':
app = QtWidgets.QApplication(sys.argv)
subthread = SubThread()
subthread.messagetrigger.connect(callback)
subthread.start()
sys.exit(app.exec_())
感谢你能够认真阅读完这篇文章,希望小编分享的“如何利用PyQt中的QThread类实现多线程”这篇文章对大家有帮助,同时也希望大家多多支持亿速云,关注亿速云行业资讯频道,更多相关知识等着你来学习!
亿速云「云服务器」,即开即用、新一代英特尔至强铂金CPU、三副本存储NVMe SSD云盘,价格低至29元/月。点击查看>>
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。