利用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 smtplib模块发送SSL/TLS安全邮件实例
Apr 08 Python
使用python加密自己的密码
Aug 04 Python
Python简单操作sqlite3的方法示例
Mar 22 Python
对python中return和print的一些理解
Aug 18 Python
Python Pandas找到缺失值的位置方法
Apr 12 Python
Python字符串的全排列算法实例详解
Jan 07 Python
python添加菜单图文讲解
Jun 04 Python
对Django中的权限和分组管理实例讲解
Aug 16 Python
解决Tensorboard 不显示计算图graph的问题
Feb 15 Python
Python while true实现爬虫定时任务
Jun 08 Python
pycharm代码删除恢复的方法
Jun 26 Python
Python机器学习应用之基于线性判别模型的分类篇详解
Jan 18 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
在数据量大(超过10万)的情况下
2007/01/15 PHP
PHP下使用CURL方式POST数据至API接口的代码
2013/02/14 PHP
smarty中post用法实例
2014/11/28 PHP
php上传文件并显示上传进度的方法
2015/03/24 PHP
php使用Jpgraph创建柱状图展示年度收支表效果示例
2017/02/15 PHP
jquery ui dialog里调用datepicker的问题
2009/08/06 Javascript
面向对象的编程思想在javascript中的运用上部
2009/11/20 Javascript
JavaScript Timer实现代码
2010/02/17 Javascript
JavaScript 字符串处理函数使用小结
2010/12/02 Javascript
与jquery serializeArray()一起使用的函数,主要来方便提交表单
2011/01/31 Javascript
基于jquery库的tab新形式使用
2012/11/16 Javascript
编写针对IE的JS代码两种编写方法
2013/01/30 Javascript
解析Jquery的LigerUI如何实现文件上传
2013/07/09 Javascript
基于jQuery实现仿百度首页选项卡切换效果
2016/05/29 Javascript
全面解析Bootstrap中scrollspy(滚动监听)的使用方法
2016/06/06 Javascript
用AngularJS来实现监察表单按钮的禁用效果
2016/11/02 Javascript
Vue.js实现无限加载与分页功能开发
2016/11/03 Javascript
浅谈Express异步进化史
2017/09/09 Javascript
详解如何为你的angular app构建一个第三方库
2018/12/07 Javascript
JavaScript ES2019中的8个新特性详解
2019/02/20 Javascript
[02:53]DOTA2英雄昆卡基础教程
2013/11/25 DOTA
python使用pil生成图片验证码的方法
2015/05/08 Python
基于Python实现一个简单的银行转账操作
2016/03/06 Python
python urllib爬取百度云连接的实例代码
2017/06/19 Python
Python cookbook(数据结构与算法)将多个映射合并为单个映射的方法
2018/04/19 Python
python实现对输入的密文加密
2019/03/20 Python
解决python xx.py文件点击完之后一闪而过的问题
2019/06/24 Python
python按修改时间顺序排列文件的实例代码
2019/07/25 Python
美国成衣女装品牌:CHICO’S
2016/09/19 全球购物
美国机场停车位预订:About Airport Parking
2018/03/26 全球购物
Hammitt官网:设计师手袋
2020/05/23 全球购物
2015年元旦联欢晚会活动总结
2014/11/28 职场文书
《黄山奇石》教学反思
2016/02/18 职场文书
mysql死锁和分库分表问题详解
2021/04/16 MySQL
python 如何获取页面所有a标签下href的值
2021/05/06 Python
php 文件上传至OSS及删除远程阿里云OSS文件
2021/07/04 PHP