利用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使用MySQLdb for Python操作数据库教程
Oct 11 Python
Python中的字符串替换操作示例
Jun 27 Python
Python正规则表达式学习指南
Aug 02 Python
Python封装原理与实现方法详解
Aug 28 Python
python实现支付宝转账接口
May 07 Python
在VS2017中用C#调用python脚本的实现
Jul 31 Python
在macOS上搭建python环境的实现方法
Aug 13 Python
python处理document文档保留原样式
Sep 23 Python
解决python 读取excel时 日期变成数字并加.0的问题
Oct 08 Python
python 并发下载器实现方法示例
Nov 22 Python
Python使用enumerate获取迭代元素下标
Feb 03 Python
如何验证python安装成功
Jul 06 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类
2006/10/09 PHP
php实现概率性随机抽奖代码
2016/01/02 PHP
PHP实现基于PDO扩展连接PostgreSQL对象关系数据库示例
2018/03/31 PHP
多个Laravel项目如何共用migrations详解
2018/09/25 PHP
PHP7实现和CryptoJS的AES加密方式互通示例【AES-128-ECB加密】
2019/06/08 PHP
Laravel5.1框架注册中间件的三种场景详解
2019/07/09 PHP
收集的一些Array及String原型对象的扩展实现代码
2010/12/05 Javascript
jquery关于图形报表的运用实现代码
2011/01/06 Javascript
javascript arguments使用示例
2014/12/16 Javascript
jQuery实现流动虚线框的方法
2015/01/29 Javascript
理解Javascript的动态语言特性
2015/06/17 Javascript
js简单实现调整网页字体大小的方法
2016/07/23 Javascript
Vue组件BootPage实现简单的分页功能
2016/09/12 Javascript
JavaScript实现三级联动效果
2017/07/15 Javascript
ES6学习教程之Map的常用方法总结
2017/08/03 Javascript
Angular搜索 过滤 批量删除 添加 表单验证功能集锦(实例代码)
2017/10/25 Javascript
jqGrid表格底部汇总、合计行footerrow处理
2019/08/21 Javascript
小程序中设置缓存过期的实现方法
2020/01/14 Javascript
[49:05]Newbee vs TNC 2018国际邀请赛小组赛BO2 第一场 8.16
2018/08/17 DOTA
浅谈django model的get和filter方法的区别(必看篇)
2017/05/23 Python
python爬取个性签名的方法
2018/06/17 Python
python中partial()基础用法说明
2018/12/30 Python
2019 Python最新面试题及答案16道题
2019/04/11 Python
教你一步步利用python实现贪吃蛇游戏
2019/06/27 Python
解决pyqt5异常退出无提示信息的问题
2020/04/08 Python
纯CSS3实现3D旋转书本效果
2016/03/21 HTML / CSS
联想哥伦比亚网上商城:Lenovo Colombia
2017/01/10 全球购物
Elizabeth Gage官网:英国最好的珠宝设计之一
2020/09/26 全球购物
餐饮业创业计划书范文
2014/01/06 职场文书
车辆安全检查制度
2014/01/12 职场文书
《翻越远方的大山》教学反思
2014/04/13 职场文书
新兵入伍心得体会
2014/09/04 职场文书
2015年学生会主席工作总结
2015/04/21 职场文书
关爱空巢老人感想
2015/08/11 职场文书
2016新党章学习心得体会
2016/01/15 职场文书
Js类的构建与继承案例详解
2021/09/15 Javascript