利用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错误和解决方法汇总整理
Jun 03 Python
Python使用Pycrypto库进行RSA加密的方法详解
Jun 06 Python
Python使用自带的ConfigParser模块读写ini配置文件
Jun 26 Python
Python实现调度算法代码详解
Dec 01 Python
使用pygame模块编写贪吃蛇的实例讲解
Feb 05 Python
Python判断以什么结尾以什么开头的实例
Oct 27 Python
Django项目主urls导入应用中views的红线问题解决
Aug 10 Python
Python 异步协程函数原理及实例详解
Nov 13 Python
pandas factorize实现将字符串特征转化为数字特征
Dec 19 Python
Python-opencv 双线性插值实例
Jan 17 Python
python使用pandas抽样训练数据中某个类别实例
Feb 28 Python
pytorch加载自己的图像数据集实例
Jul 07 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
全国FM电台频率大全 - 19 广东省
2020/03/11 无线电
php4的session功能评述(二)
2006/10/09 PHP
PHP 变量定义和变量替换的方法
2009/07/30 PHP
ThinkPHP自动完成中使用函数与回调方法实例
2014/11/29 PHP
PHP+Ajax实现验证码的实时验证
2016/07/20 PHP
php中str_pad()函数用法分析
2017/03/28 PHP
php使用filter_var函数判断邮箱,url,ip格式示例
2019/07/06 PHP
ExtJS 2.0实用简明教程 之获得ExtJS
2009/04/29 Javascript
jQuery+jqmodal弹出窗口实现代码分明
2010/06/14 Javascript
理解Javascript_10_对象模型
2010/10/16 Javascript
js修改input的type属性及浏览器兼容问题探讨与解决
2013/01/23 Javascript
使用js判断控件是否获得焦点
2014/01/03 Javascript
javascript的创建多行字符串的7种方法
2014/04/29 Javascript
JavaScript错误处理
2015/02/03 Javascript
JavaScript实现MIPS乘法模拟的方法
2015/04/17 Javascript
javascript常用的方法整理
2015/08/20 Javascript
微信小程序(应用号)简单实例应用及实例详解
2016/09/26 Javascript
AngularJS自定义指令详解(有分页插件代码)
2017/06/12 Javascript
vue 监听屏幕高度的实例
2018/09/05 Javascript
给localStorage设置一个过期时间的方法分享
2018/11/06 Javascript
js核心基础之闭包的应用实例分析
2019/05/11 Javascript
JavaScript深入V8引擎以及编写优化代码的5个技巧
2019/06/24 Javascript
JavaScript定时器常见用法实例分析
2019/11/15 Javascript
ES6使用新特性Proxy实现的数据绑定功能实例
2020/05/11 Javascript
VUE子组件向父组件传值详解(含传多值及添加额外参数场景)
2020/09/01 Javascript
[04:27]DOTA2官方论坛水友赛集锦
2013/09/16 DOTA
Python实现一个简单的MySQL类
2015/01/07 Python
python+opencv实现动态物体追踪
2018/01/09 Python
Python学生信息管理系统修改版
2018/03/13 Python
基于Python的ModbusTCP客户端实现详解
2019/07/13 Python
python过滤中英文标点符号的实例代码
2019/07/15 Python
python按照list中字典的某key去重的示例代码
2020/10/13 Python
中国汽车租赁行业头部企业:一嗨租车
2019/05/16 全球购物
幼儿园中班区域活动总结
2014/07/09 职场文书
大二学年个人总结
2015/03/03 职场文书
前端学习——JavaScript原生实现购物车案例
2021/03/31 Javascript