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中的魔法方法深入理解
Jul 09 Python
Python基于Pymssql模块实现连接SQL Server数据库的方法详解
Jul 20 Python
使用Python处理Excel表格的简单方法
Jun 07 Python
对dataframe进行列相加,行相加的实例
Jun 08 Python
Python3几个常见问题的处理方法
Feb 26 Python
TensorFlow卷积神经网络之使用训练好的模型识别猫狗图片
Mar 14 Python
python将字典列表导出为Excel文件的方法
Sep 02 Python
解决windows下python3使用multiprocessing.Pool出现的问题
Apr 08 Python
使用Python FastAPI构建Web服务的实现
Jun 08 Python
使用python脚本自动生成K8S-YAML的方法示例
Jul 12 Python
关于Python不换行输出和不换行输出end=““不显示的问题(亲测已解决)
Oct 27 Python
OpenCV中resize函数插值算法的实现过程(五种)
Jun 05 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
Yii框架实现的验证码、登录及退出功能示例
2017/05/20 PHP
如何优雅的使用 laravel 的 validator验证方法
2018/11/11 PHP
laravel 框架结合关联查询 when()用法分析
2019/11/22 PHP
JavaScript CSS修改学习第五章 给“上传”添加样式
2010/02/19 Javascript
jQuery实现的Email中的收件人效果(按del键删除)
2011/03/20 Javascript
关于hashchangebroker和statehashable的补充文档
2011/08/08 Javascript
JavaScript中“基本类型”之争小结
2013/01/03 Javascript
JS返回iframe中frameBorder属性值的方法
2015/04/01 Javascript
JSON与XML优缺点对比分析
2015/07/17 Javascript
IOS中safari下的select下拉菜单文字过长不换行的解决方法
2016/09/26 Javascript
JavaScript和jQuery制作光棒效果
2017/02/24 Javascript
使用angular帮你实现拖拽的示例
2017/07/05 Javascript
JavaScript使用FileReader实现图片上传预览效果
2020/03/27 Javascript
vue组件发布到npm简单步骤
2017/11/30 Javascript
Vue在页面右上角实现可悬浮/隐藏的系统菜单
2018/05/04 Javascript
详解nuxt sass全局变量(公共scss解决方案)
2018/06/27 Javascript
微信小程序全局变量的设置、使用、修改过程解析
2019/09/24 Javascript
微信小程序实现多行文字超出部分省略号显示功能
2019/10/23 Javascript
js实现圆形显示鼠标单击位置
2020/02/11 Javascript
javascript实现下拉菜单效果
2021/02/09 Javascript
[06:43]DAC2018 4.5 SOLO赛 Maybe vs Paparazi
2018/04/06 DOTA
Python随手笔记之标准类型内建函数
2015/12/02 Python
Python第三方Window模块文件的几种安装方法
2018/11/22 Python
flask应用部署到服务器的方法
2019/07/12 Python
浅析PyTorch中nn.Module的使用
2019/08/18 Python
python pycharm的安装及其使用
2019/10/11 Python
Python opencv相机标定实现原理及步骤详解
2020/04/09 Python
Python参数传递机制传值和传引用原理详解
2020/05/22 Python
服务中心夜班服务员岗位职责
2013/11/27 职场文书
毕业生自荐书
2014/02/03 职场文书
自荐信如何制作?
2014/02/21 职场文书
2015年党风廉政建设责任书
2015/01/29 职场文书
2015年秋季学校开学标语
2015/07/16 职场文书
朋友聚会祝酒词
2015/08/10 职场文书
创业计划书之个人工作室
2019/08/22 职场文书
zabbix 代理服务器的部署与 zabbix-snmp 监控问题
2022/07/15 Servers