利用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 相关文章推荐
Linux中安装Python的交互式解释器IPython的教程
Jun 13 Python
Python变量和数据类型详解
Feb 15 Python
python 实时得到cpu和内存的使用情况方法
Jun 11 Python
Python实现繁?转为简体的方法示例
Dec 18 Python
python文本数据处理学习笔记详解
Jun 17 Python
Python 一键获取百度网盘提取码的方法
Aug 01 Python
Python matplotlib生成图片背景透明的示例代码
Aug 30 Python
使用sklearn的cross_val_score进行交叉验证实例
Feb 28 Python
python 实现任务管理清单案例
Apr 25 Python
python中return如何写
Jun 18 Python
python转化excel数字日期为标准日期操作
Jul 14 Python
属性与 @property 方法让你的python更高效
Sep 21 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中3种生成XML文件方法的速度效率比较
2012/10/06 PHP
在windows平台上构建自己的PHP实现方法(仅适用于php5.2)
2013/07/05 PHP
了解PHP的返回引用和局部静态变量
2015/06/04 PHP
Smarty实现页面静态化(生成HTML)的方法
2016/05/23 PHP
thinkphp实现附件上传功能
2017/05/26 PHP
PHP生成随机数的方法总结
2018/03/01 PHP
解决laravel session失效的问题
2019/10/14 PHP
MultiSelect左右选择控件的设计与实现介绍
2013/06/08 Javascript
深入理解JS中的变量及作用域、undefined与null
2014/03/04 Javascript
iScroll中事件点击触发两次解决方案
2015/03/11 Javascript
jQuery UI库中dialog对话框功能使用全解析
2016/04/23 Javascript
jQuery图片轮播实现并封装(一)
2016/12/03 Javascript
jQuery Jsonp跨域模拟搜索引擎
2017/06/17 jQuery
Javascript实现跨域后台设置拦截的方法详解
2017/08/04 Javascript
js+canvas实现验证码功能
2020/09/21 Javascript
解决React在安装antd之后出现的Can't resolve './locale'问题(推荐)
2020/05/03 Javascript
python中子类继承父类的__init__方法实例
2016/12/15 Python
python函数的5种参数详解
2017/02/24 Python
python3基于OpenCV实现证件照背景替换
2018/07/18 Python
python将txt文件读取为字典的示例
2018/12/22 Python
Python理解递归的方法总结
2019/01/28 Python
浅谈Pycharm最有必要改的几个默认设置项
2020/02/14 Python
Python统计文本词汇出现次数的实例代码
2020/02/27 Python
新手入门学习python Numpy基础操作
2020/03/02 Python
Yankee Candle官网:美国最畅销蜡烛品牌之一
2020/01/05 全球购物
查询优化的一般准则有哪些
2015/03/08 面试题
vue 中 get / delete 传递数组参数方法
2021/03/23 Vue.js
员工安全承诺书
2014/05/22 职场文书
民生工作实施方案
2014/05/31 职场文书
介绍信怎么写
2015/01/30 职场文书
会计工作岗位职责
2015/02/03 职场文书
python解决12306登录验证码的实现
2021/04/18 Python
pytorch中F.avg_pool1d()和F.avg_pool2d()的使用操作
2021/05/22 Python
总结Java对象被序列化的两种方法
2021/06/30 Java/Android
Vue3.0中Ref与Reactive的区别示例详析
2021/07/07 Vue.js
解决linux下redis数据库overcommit_memory问题
2022/02/24 Redis