利用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中使用logging模块打印log日志详解
Apr 05 Python
【Python】Python的urllib模块、urllib2模块批量进行网页下载文件
Nov 19 Python
Python3 XML 获取雅虎天气的实现方法
Feb 01 Python
python将字符串以utf-8格式保存在txt文件中的方法
Oct 30 Python
pygame游戏之旅 添加icon和bgm音效的方法
Nov 21 Python
Python自动发送邮件的方法实例总结
Dec 08 Python
python格式化输出保留2位小数的实现方法
Jul 02 Python
PyTorch的Optimizer训练工具的实现
Aug 18 Python
解决springboot yml配置 logging.level 报错问题
Feb 21 Python
python unittest单元测试的步骤分析
Aug 02 Python
python机器学习Github已达8.9Kstars模型解释器LIME
Nov 23 Python
详细介绍python操作RabbitMq
Apr 12 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一个简单的无需刷新爬虫
2019/01/05 PHP
javascript 构建一个xmlhttp对象池合理创建和使用xmlhttp对象
2010/01/15 Javascript
jquery 跨域访问问题解决方法(笔记)
2011/06/08 Javascript
js函数调用常用方法详解
2012/12/03 Javascript
ExtJs默认的字体大小改变的几种方法(自己整理)
2013/04/18 Javascript
JQUERY实现左侧TIPS滑进滑出效果示例
2013/06/27 Javascript
网页前端优化之滚动延时加载图片示例
2013/07/13 Javascript
jQuery 鼠标经过(hover)事件的延时处理示例
2014/04/14 Javascript
jquery.ajax之beforeSend方法使用介绍
2014/12/08 Javascript
JS动态加载当前时间的方法
2015/02/09 Javascript
JavaScript中的lastIndexOf()方法使用详解
2015/06/06 Javascript
举例讲解AngularJS中的模块
2015/06/17 Javascript
后端接收不到AngularJs中$http.post发送的数据原因分析及解决办法
2016/07/05 Javascript
jQuery使用serialize()表单序列化时出现中文乱码问题的解决办法
2016/07/27 Javascript
vue2.0数据双向绑定与表单bootstrap+vue组件
2017/02/27 Javascript
jQuery实现动态给table赋值的方法示例
2017/07/04 jQuery
基于jQuery实现定位导航位置效果
2017/11/15 jQuery
JavaScript实现简单的文本逐字打印效果示例
2018/04/12 Javascript
Vue.js下拉菜单组件使用方法详解
2019/10/19 Javascript
django 单表操作实例详解
2019/07/30 Python
python elasticsearch从创建索引到写入数据的全过程
2019/08/04 Python
Python实现TCP通信的示例代码
2019/09/09 Python
ipad上运行python的方法步骤
2019/10/12 Python
HTML5 CSS3给网站设计带来出色效果
2009/07/16 HTML / CSS
CSS3实现多背景模拟动态边框的效果
2016/11/08 HTML / CSS
全球速卖通法国在线交易平台:AliExpress法国
2017/07/07 全球购物
乌克兰电子和家用电器商店:Foxtrot
2019/07/23 全球购物
简述Linux文件系统通过i节点把文件的逻辑结构和物理结构转换的工作过程
2012/04/17 面试题
高中生期末评语
2014/01/28 职场文书
毕业生求职信的经典写法
2014/01/31 职场文书
医学生自我鉴定范文
2014/03/26 职场文书
安全责任协议书
2014/04/21 职场文书
舞蹈教育学专业求职信
2014/06/29 职场文书
2014大学校园光棍节活动策划书
2014/09/29 职场文书
酒店人事主管岗位职责
2015/04/11 职场文书
导游词之桂林
2019/08/20 职场文书