利用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多线程下的变量问题
Apr 28 Python
python中的字典使用分享
Jul 31 Python
matplotlib在python上绘制3D散点图实例详解
Dec 09 Python
深入理解Django的中间件middleware
Mar 14 Python
Python 机器学习库 NumPy入门教程
Apr 19 Python
使用django-guardian实现django-admin的行级权限控制的方法
Oct 30 Python
学习python可以干什么
Feb 26 Python
python实现复制文件到指定目录
Oct 16 Python
Python+OpenCV 实现图片无损旋转90°且无黑边
Dec 12 Python
python、PyTorch图像读取与numpy转换实例
Jan 13 Python
python 读取yaml文件的两种方法(在unittest中使用)
Dec 01 Python
python中random模块详解
Mar 01 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 启动报错如何解决
2014/01/17 PHP
php数组函数array_walk用法示例
2016/05/26 PHP
php通过各种函数判断0和空
2020/07/04 PHP
PHP配合fiddler抓包抓取微信指数小程序数据的实现方法分析
2020/01/02 PHP
JS实现商品倒计时实现代码
2013/05/03 Javascript
jQuery中:checked选择器用法实例
2015/01/04 Javascript
轻松学习jQuery插件EasyUI EasyUI创建菜单与按钮
2015/11/30 Javascript
AngularJS 中的指令实践开发指南(一)
2016/03/20 Javascript
浅谈js图片前端预览之filereader和window.URL.createObjectURL
2016/06/30 Javascript
vue中的provide/inject的学习使用
2018/05/09 Javascript
详解npm 配置项registry修改为淘宝镜像
2018/09/07 Javascript
js实现转动骰子模型
2019/10/24 Javascript
Python实现保证只能运行一个脚本实例
2015/06/24 Python
pandas 时间格式转换的实现
2019/07/06 Python
django基于cors解决跨域请求问题详解
2019/08/06 Python
Python for循环及基础用法详解
2019/11/08 Python
Python倒排索引之查找包含某主题或单词的文件
2019/11/13 Python
解决python虚拟环境切换无效的问题
2020/04/30 Python
浅谈Python中的继承
2020/06/19 Python
css3 transform导致子元素固定定位变成绝对定位的方法
2020/03/06 HTML / CSS
利用三角函数在canvas上画虚线的方法
2018/01/11 HTML / CSS
美国在线宠物用品商店:Entirely Pets
2017/01/01 全球购物
世界最大的票务市场:viagogo
2017/02/16 全球购物
美国奢侈品在线团购网站:Gilt City
2017/11/16 全球购物
医学护理毕业生自荐信
2013/11/07 职场文书
技校毕业生自荐书
2014/05/23 职场文书
拉拉队口号
2014/06/16 职场文书
计划生育证明书写要求
2014/09/17 职场文书
2015年度班主任自我评价
2015/03/11 职场文书
烈士陵园观后感
2015/06/08 职场文书
忠诚教育学习心得体会
2016/01/23 职场文书
python 爬取哔哩哔哩up主信息和投稿视频
2021/06/07 Python
Python torch.flatten()函数案例详解
2021/08/30 Python
Python使用socket去实现TCP客户端和TCP服务端
2022/04/12 Python
以MySQL5.7为例了解一下执行计划
2022/04/13 MySQL
Alexa停服!网站排名将何去何从?目前还没有替代品。
2022/04/15 杂记