利用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中global与nonlocal比较
Nov 21 Python
Python实现PS滤镜特效Marble Filter玻璃条纹扭曲效果示例
Jan 29 Python
python的dataframe和matrix的互换方法
Apr 11 Python
python清除字符串前后空格函数的方法
Oct 21 Python
对Python3 解析html的几种操作方式小结
Feb 16 Python
Python简直是万能的,这5大主要用途你一定要知道!(推荐)
Apr 03 Python
Django中使用haystack+whoosh实现搜索功能
Oct 08 Python
Python文本处理简单易懂方法解析
Dec 19 Python
python shutil文件操作工具使用实例分析
Dec 25 Python
Pycharm激活码激活两种快速方式(附最新激活码和插件)
Mar 12 Python
python开发飞机大战游戏
Jul 15 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中通过虚代理实现延迟加载的实现代码
2011/06/10 PHP
Thinkphp 框架配置操作之配置加载与读取配置实例分析
2020/05/15 PHP
JS中图片缓冲loading技术的实例代码
2013/08/29 Javascript
jquery选择器之基本过滤选择器详解
2014/01/27 Javascript
js实现页面跳转重定向的几种方式
2014/05/29 Javascript
jQuery简单几行代码实现tab切换
2015/03/10 Javascript
JavaScript面对国际化编程时的一些建议
2015/06/24 Javascript
jQuery中事件与动画的总结分享
2016/05/24 Javascript
Javascript 高性能之递归,迭代,查表法详解及实例
2017/01/08 Javascript
jQuery Ajax实现Select多级关联动态绑定数据的实例代码
2018/10/26 jQuery
layer.open回调获取弹出层参数的实现方法
2019/09/10 Javascript
ionic+html5+API实现双击返回键退出应用
2019/09/17 Javascript
vue实现权限控制路由(vue-router 动态添加路由)
2019/11/04 Javascript
linux系统使用python监测网络接口获取网络的输入输出
2014/01/15 Python
Python实现获取磁盘剩余空间的2种方法
2017/06/07 Python
Python MD5加密实例详解
2017/08/02 Python
python使用tensorflow保存、加载和使用模型的方法
2018/01/31 Python
利用Python在一个文件的头部插入数据的实例
2018/05/02 Python
Pycharm代码无法复制,无法选中删除,无法编辑的解决方法
2018/10/22 Python
Pandas DataFrame 取一行数据会得到Series的方法
2018/11/10 Python
Python 模拟动态产生字母验证码图片功能
2019/12/24 Python
pycharm 关掉syntax检查操作
2020/06/09 Python
几个CSS3的flex弹性盒模型布局的简单例子演示
2016/05/12 HTML / CSS
香港唯港荟酒店预订:Hotel ICON
2018/03/27 全球购物
英国现代家具和装饰网站:PN Home
2018/08/16 全球购物
智能电子秤、手表和健康监测仪:Withings(之前为诺基亚健康)
2018/10/30 全球购物
几道Java和数据库的面试题
2013/05/30 面试题
实习心得体会
2014/01/02 职场文书
慰问敬老院活动总结
2014/04/26 职场文书
竞选部长演讲稿
2014/04/26 职场文书
车辆工程专业求职信
2014/06/14 职场文书
2015年宣传部个人工作总结
2015/05/14 职场文书
2016年清明节寄语
2015/12/04 职场文书
如何用Laravel包含你自己的帮助函数
2021/05/27 PHP
postgres之jsonb属性的使用操作
2021/06/23 PostgreSQL
Nginx本地配置SSL访问的实例教程
2022/05/30 Servers