利用PyQt中的QThread类实现多线程


Posted in Python onFebruary 18, 2020
  • 用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_())

以上就是本文的全部内容了,希望对大家学习python能够有所帮助

Python 相关文章推荐
详解Python的Django框架中的模版相关知识
Jul 15 Python
一步步解析Python斗牛游戏的概率
Feb 12 Python
用Python设计一个经典小游戏
May 15 Python
使用python实现tcp自动重连
Jul 02 Python
python2.7安装图文教程
Mar 13 Python
利用Python如何生成便签图片详解
Jul 09 Python
Python3.5基础之变量、数据结构、条件和循环语句、break与continue语句实例详解
Apr 26 Python
python实现用户名密码校验
Mar 18 Python
python文件操作seek()偏移量,读取指正到指定位置操作
Jul 05 Python
基于Python爬取素材网站音频文件
Oct 21 Python
python 如何对logging日志封装
Dec 02 Python
如何使用PyCharm及常用配置详解
Jun 03 Python
python 对任意数据和曲线进行拟合并求出函数表达式的三种解决方案
Feb 18 #Python
Python识别html主要文本框过程解析
Feb 18 #Python
pytorch实现seq2seq时对loss进行mask的方式
Feb 18 #Python
python多项式拟合之np.polyfit 和 np.polyld详解
Feb 18 #Python
tensorflow 分类损失函数使用小记
Feb 18 #Python
python如何把字符串类型list转换成list
Feb 18 #Python
python计算波峰波谷值的方法(极值点)
Feb 18 #Python
You might like
php查询mssql出现乱码的解决方法
2014/12/29 PHP
PHP6新特性分析
2016/03/03 PHP
ThinkPHP的SAE开发相关注意事项详解
2016/10/09 PHP
PHP调试及性能分析工具Xdebug详解
2017/02/09 PHP
tp5递归 无限级分类详解
2019/10/18 PHP
JavaScript 不只是脚本
2007/05/30 Javascript
jquery ajax 登录验证实现代码
2009/09/23 Javascript
JS对外部文件的加载及对IFRMAME的加载的实现,当加载完成后,指定指向方法(方法回调)
2011/07/04 Javascript
JS在textarea光标处插入文本的小例子
2013/03/22 Javascript
JavaScript怎么判断图片是否加载完成以便获取其尺寸
2014/05/08 Javascript
JavaScript DOM基础
2015/04/13 Javascript
在JavaScript中处理字符串之link()方法的使用
2015/06/08 Javascript
基于Bootstrap的UI扩展 StyleBootstrap
2016/06/17 Javascript
Js删除数组中某一项或几项的几种方法(推荐)
2016/07/27 Javascript
js在ie下打开对话窗口的方法小结
2016/10/24 Javascript
bootstrap——bootstrapTable实现隐藏列的示例
2017/01/14 Javascript
原生小程序封装跑马灯效果
2020/10/21 Javascript
[03:52]显微镜下的DOTA2第三期——英雄在无聊的时候干什么
2014/06/20 DOTA
[02:51]2014DOTA2国际邀请赛 IG战队官方纪录片
2014/07/21 DOTA
python生成器的使用方法
2013/11/21 Python
各个系统下的Python解释器相关安装方法
2015/10/12 Python
python 文件转成16进制数组的实例
2018/07/09 Python
Pandas之Fillna填充缺失数据的方法
2019/06/25 Python
Python关于__name__属性的含义和作用详解
2020/02/19 Python
Python日志:自定义输出字段 json格式输出方式
2020/04/27 Python
python 基于UDP协议套接字通信的实现
2021/01/22 Python
请写出一段Python代码实现删除一个list里面的重复元素
2015/12/29 面试题
事业单位鉴定材料
2014/05/25 职场文书
党支部先进事迹材料
2014/12/24 职场文书
西湖英语导游词
2015/02/06 职场文书
创卫工作总结2015
2015/04/22 职场文书
2015大学生暑期实习报告
2015/07/13 职场文书
总经理2015中秋节致辞
2015/07/29 职场文书
只用Python就可以制作的简单词云
2021/06/07 Python
新手初学Java List 接口
2021/07/07 Java/Android
详解Mysql事务并发(脏读、不可重复读、幻读)
2022/04/29 MySQL