利用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中的装饰器
Jul 31 Python
简析Python的闭包和装饰器
Feb 26 Python
python 读取txt,json和hdf5文件的实例
Jun 05 Python
Python中文件的写入读取以及附加文字方法
Jan 23 Python
python删除列表元素的三种方法(remove,pop,del)
Jul 22 Python
树莓派4B+opencv4+python 打开摄像头的实现方法
Oct 18 Python
Python Django框架url反向解析实现动态生成对应的url链接示例
Oct 18 Python
Python 求数组局部最大值的实例
Nov 26 Python
python各层级目录下import方法代码实例
Jan 20 Python
jupyter notebook实现显示行号
Apr 13 Python
Django全局启用登陆验证login_required的方法
Jun 02 Python
python基础之错误和异常处理
Oct 24 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的access操作类
2008/04/09 PHP
PHP获取mysql数据表的字段名称和详细信息的方法
2014/09/27 PHP
WordPress中获取页面链接和标题的相关PHP函数用法解析
2015/12/17 PHP
用PHP写的一个冒泡排序法的函数简单实例
2016/05/26 PHP
javascript 词法作用域和闭包分析说明
2010/08/12 Javascript
jquery的Theme和Theme Switcher使用小结
2010/09/08 Javascript
js原型链原理看图说明
2012/07/07 Javascript
javascript 使用 NodeList需要注意的问题
2013/03/04 Javascript
20行代码实现的一个CSS覆盖率测试脚本
2013/07/07 Javascript
jQuery中end()方法用法实例
2015/01/08 Javascript
基于jquery实现导航菜单高亮显示(两种方法)
2015/08/23 Javascript
JS实现带圆弧背景渐变效果的导航菜单代码
2015/10/13 Javascript
js window对象属性和方法相关资料整理
2015/11/11 Javascript
分享JavaScript监听全部Ajax请求事件的方法
2016/08/28 Javascript
JS实现的适合做faq或menu滑动效果示例
2016/11/17 Javascript
深入理解JS继承和原型链的问题
2016/12/17 Javascript
微信小程序中用WebStorm使用LESS
2017/03/08 Javascript
JavaScript正则表达式校验与递归函数实际应用实例解析
2017/08/04 Javascript
vue.js与后台数据交互的实例讲解
2018/08/08 Javascript
vue中使用input[type="file"]实现文件上传功能
2018/09/10 Javascript
京东优选小程序的实现代码示例
2020/02/25 Javascript
jQuery HTML css()方法与css类实例详解
2020/05/20 jQuery
Python中 map()函数的用法详解
2018/07/10 Python
Python实现最常见加密方式详解
2019/07/13 Python
tensorflow2.0与tensorflow1.0的性能区别介绍
2020/02/07 Python
Python进程间通信multiprocess代码实例
2020/03/18 Python
安装并免费使用Pycharm专业版(学生/教师)
2020/09/24 Python
pandas抽取行列数据的几种方法
2020/12/13 Python
德国户外装备、登山运动和攀岩商店:tapir store
2020/02/12 全球购物
int和Integer有什么区别
2013/05/25 面试题
门卫人员岗位职责
2013/12/24 职场文书
大学生团员个人总结
2015/02/14 职场文书
《平移和旋转》教学反思
2016/02/19 职场文书
Javascript中的解构赋值语法详解
2021/04/02 Javascript
Vue和Flask通信的实现
2021/05/19 Vue.js
Tomcat弱口令复现及利用
2022/05/06 Servers