python GUI库图形界面开发之PyQt5多线程中信号与槽的详细使用方法与实例


Posted in Python onMarch 08, 2020

PyQt5简单多线程信号与槽的使用

最简单的多线程使用方法是利用QThread函数,展示QThread函数和信号简单结合的方法

import sys
from PyQt5.QtCore import *
from PyQt5.QtWidgets import *
class Main(QWidget):
  def __init__( self, parent=None ):
    super(Main, self).__init__(parent)
    #创建一个线程实例并设置名称 变量 信号与槽
    self.thread = MyThread()
    self.thread.setIdentity('thread1')
    self.thread.sinOut.connect(self.outText)
    self.thread.setVal(6)
  #打印输出文本
  def outText( self, text ):
    print(text)
class MyThread(QThread):
  #自定义信号参数为str类型
  sinOut = pyqtSignal(str)
  def __init__( self, parent=None ):
    super(MyThread, self).__init__(parent)
    #初始化名称为空
    self.identity = None
  def setIdentity( self, text ):
    #设置多线程名称
    self.identity=text
  def setVal( self, val ):
    #接受数据,运行多线程
    self.times = int(val)
    self.run()
  def run( self ):
    #当次数大于0以及名称不为空时执行代码
    while self.times>0 and self.identity:
      #发射信号,触发打印函数,次数-1
      self.sinOut.emit(self.identity+'==>'+str(self.times))
      self.times-=1
if __name__ == '__main__':
  app=QApplication(sys.argv)
  main=Main()
  main.show()
  sys.exit(app.exec_())

运行如下

python GUI库图形界面开发之PyQt5多线程中信号与槽的详细使用方法与实例

主线程与子线程的使用

有时候在开发程序时会经常执行一些耗时的操作,这样就会导致界面卡顿,这也是多线程的应用范围之一,这样我们就可以创建多线程,使用主线程更新界面,使用子线程后台处理数据,最后将结果显示在界面上

import sys,time
from PyQt5.QtCore import *
from PyQt5.QtWidgets import *
class BackQthread(QThread):
  #自定义信号为str参数类型
  update_date=pyqtSignal(str)
  def run( self ):
    while True:
      #获得当前系统时间
      data=QDateTime.currentDateTime()
      #设置时间显示格式
      curTime=data.toString('yyyy-MM-dd hh:mm:ss dddd')
      #发射信号
      self.update_date.emit(str(curTime))
      #睡眠一秒
      time.sleep(1)
class window(QDialog):
  def __init__(self):
    super(window, self).__init__()
    #设置标题与初始大小
    self.setWindowTitle('PyQt5界面实时更新的例子')
    self.resize(400,100)
    #实例化文本输入框及其初始大小
    self.input=QLineEdit(self)
    self.input.resize(400,100)
    self.initUI()
  def initUI( self ):
    #实例化对象
    self.backend=BackQthread()
    #信号连接到界面显示槽函数
    self.backend.update_date.connect(self.handleDisplay)
    #多线程开始
    self.backend.start()
  def handleDisplay( self,data ):
    #设置单行文本框的文本
    self.input.setText(data)
if __name__ == '__main__':
  app=QApplication(sys.argv)
  win=window()
  win.show()
  sys.exit(app.exec_())

运行程序,效果如下

python GUI库图形界面开发之PyQt5多线程中信号与槽的详细使用方法与实例

本文主要讲解了PyQt5多线程中信号与槽的详细使用方法与实例,更多关于PyQt5信号与槽的知识请查看下面的相关链接

Python 相关文章推荐
浅析Python的Django框架中的Memcached
Jul 23 Python
VTK与Python实现机械臂三维模型可视化详解
Dec 13 Python
python实现kNN算法
Dec 20 Python
python操作xlsx文件的包openpyxl实例
May 03 Python
Django框架多表查询实例分析
Jul 04 Python
OpenCV+face++实现实时人脸识别解锁功能
Aug 28 Python
Django之使用celery和NGINX生成静态页面实现性能优化
Oct 08 Python
Python HTMLTestRunner可视化报告实现过程解析
Apr 10 Python
python函数map()和partial()的知识点总结
May 26 Python
Python+OpenCV图像处理—— 色彩空间转换
Oct 22 Python
正确的理解和使用Django信号(Signals)
Apr 14 Python
Python+Tkinter制作专属图形化界面
Apr 01 Python
python GUI库图形界面开发之PyQt5结合Qt Designer创建信号与槽的详细方法与实例
Mar 08 #Python
python输出第n个默尼森数的实现示例
Mar 08 #Python
Tensorflow之梯度裁剪的实现示例
Mar 08 #Python
Django自定义全局403、404、500错误页面的示例代码
Mar 08 #Python
Django 自定义404 500等错误页面的实现
Mar 08 #Python
Python loguru日志库之高效输出控制台日志和日志记录
Mar 07 #Python
Centos7下源码安装Python3 及shell 脚本自动安装Python3的教程
Mar 07 #Python
You might like
整理的一些实用WordPress后台MySQL操作命令
2013/01/07 PHP
php sybase_fetch_array使用方法
2014/04/15 PHP
PHP利用百度ai实现文本和图片审核
2019/05/08 PHP
根据分辨率不同,调用不同的css文件
2006/08/25 Javascript
AJAX架构之Dojo篇
2007/04/10 Javascript
在Windows上安装Node.js模块的方法
2011/09/25 Javascript
网站繁简切换的JS遇到页面卡死的解决方法
2014/03/12 Javascript
可编辑下拉框的2种实现方式
2014/06/13 Javascript
javascript Deferred和递归次数限制实例
2014/10/21 Javascript
Node.js抓取中文网页乱码问题和解决方法
2015/02/10 Javascript
JQuery使用index方法获取Jquery对象数组下标的方法
2015/05/18 Javascript
深入理解jquery跨域请求方法
2016/05/18 Javascript
微信小程序 表单Form实例详解(附源码)
2016/12/22 Javascript
ionic中列表项增加和删除的实现方法
2017/01/22 Javascript
解决angular2在双向数据绑定时[(ngModel)]无法使用的问题
2018/09/13 Javascript
axios封装,使用拦截器统一处理接口,超详细的教程(推荐)
2019/05/02 Javascript
JavaScript设计模式--简单工厂模式定义与应用案例详解
2020/05/23 Javascript
Python中字典和集合学习小结
2017/07/07 Python
Python爬虫信息输入及页面的切换方法
2018/05/11 Python
解决PySide+Python子线程更新UI线程的问题
2019/01/11 Python
Python制作exe文件简单流程
2019/01/24 Python
Python数据库小程序源代码
2019/09/15 Python
opencv 图像轮廓的实现示例
2020/07/08 Python
Python如何进行时间处理
2020/08/06 Python
Python使用socket模块实现简单tcp通信
2020/08/18 Python
Pycharm配置lua编译环境过程图解
2020/11/28 Python
Pyecharts 中Geo函数常用参数的用法说明
2021/02/01 Python
整理HTML5中支持的URL编码与字符编码
2016/02/23 HTML / CSS
销售助理岗位职责
2014/02/21 职场文书
大学生全国两会报告感想
2014/03/17 职场文书
建筑院校毕业生求职信
2014/06/13 职场文书
2014年庆祝国庆65周年演讲稿
2014/09/21 职场文书
格列夫游记读书笔记
2015/07/01 职场文书
公司劳动纪律管理制度
2015/08/04 职场文书
SpringBoot中HttpSessionListener的简单使用方式
2022/03/17 Java/Android
星际争霸:毕姥爷vs解冻01
2022/04/01 星际争霸