利用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获得文件创建时间和修改时间的方法
Jun 30 Python
Python基于OpenCV实现视频的人脸检测
Jan 23 Python
python实现按长宽比缩放图片
Jun 07 Python
python 剪切移动文件的实现代码
Aug 02 Python
将Django项目部署到CentOs服务器中
Oct 18 Python
python实现转圈打印矩阵
Mar 02 Python
ubuntu 18.04搭建python环境(pycharm+anaconda)
Jun 14 Python
pandas删除行删除列增加行增加列的实现
Jul 06 Python
python os.path.isfile 的使用误区详解
Nov 29 Python
python+selenium+chrome批量文件下载并自动创建文件夹实例
Apr 27 Python
Python爬取网页信息的示例
Sep 24 Python
基于python的matplotlib制作双Y轴图
Apr 20 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
PHP5.5和之前的版本empty函数的不同之处
2014/06/13 PHP
PHP函数checkdnsrr用法详解(Windows平台用法)
2016/03/21 PHP
自写的利用PDO对mysql数据库增删改查操作类
2018/02/19 PHP
php判断电子邮件是否正确方法
2018/12/04 PHP
Javascript学习笔记二 之 变量
2010/12/15 Javascript
关于JS判断图片是否加载完成且获取图片宽度的方法
2013/04/09 Javascript
js综合应用实例简单的表格统计
2013/09/03 Javascript
php读取sqlite数据库入门实例代码
2014/06/25 Javascript
jquery.idTabs 选项卡使用示例代码
2014/09/03 Javascript
基于jQuery倒计时插件实现团购秒杀效果
2016/05/13 Javascript
jQuery图片轮播插件——前端开发必看
2016/05/31 Javascript
Bootstrap输入框组件简单实现代码
2017/03/06 Javascript
浅谈angular4 ng-content 中隐藏的内容
2017/08/18 Javascript
JS实现的3des+base64加密解密算法完整示例
2018/05/18 Javascript
JS数组去重常用方法实例小结【4种方法】
2018/05/28 Javascript
在vue中使用公共过滤器filter的方法
2018/06/26 Javascript
JavaScript使用递归和循环实现阶乘的实例代码
2018/08/28 Javascript
vue props传值失败 输出undefined的解决方法
2018/09/11 Javascript
vue 父组件给子组件传值子组件给父组件传值的实例代码
2019/04/15 Javascript
javascript中正则表达式语法详解
2020/08/07 Javascript
Python实现对excel文件列表值进行统计的方法
2015/07/25 Python
python实现爬虫统计学校BBS男女比例(一)
2015/12/31 Python
Python 实现敏感目录扫描的示例代码
2020/05/21 Python
使用css3制作登录表单的步骤
2014/04/07 HTML / CSS
远程调用的原理
2014/07/05 面试题
社区食品安全实施方案
2014/03/28 职场文书
培训研修方案
2014/06/06 职场文书
专题组织生活会方案
2014/06/15 职场文书
教师遵守党的政治纪律情况对照检查材料
2014/09/26 职场文书
2014年机关党建工作总结
2014/11/11 职场文书
内勤岗位职责
2015/02/10 职场文书
2015年班干部工作总结
2015/04/29 职场文书
JS Object构造函数之Object.freeze
2021/04/28 Javascript
用React Native制作一个简单的游戏引擎
2021/05/27 Javascript
Python 处理表格进行成绩排序的操作代码
2021/07/26 Python
pnpm对npm及yarn降维打击详解
2022/08/05 Javascript