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在hadoop上跑起来
Jan 27 Python
对python的文件内注释 help注释方法
May 23 Python
python列表list保留顺序去重的实例
Dec 14 Python
Python中logging实例讲解
Jan 17 Python
对python3中, print横向输出的方法详解
Jan 28 Python
详解Python传入参数的几种方法
May 16 Python
numpy下的flatten()函数用法详解
May 27 Python
python flask web服务实现更换默认端口和IP的方法
Jul 26 Python
Python 使用双重循环打印图形菱形操作
Aug 09 Python
PyQt5 QDockWidget控件应用详解
Aug 12 Python
python3代码输出嵌套式对象实例详解
Dec 03 Python
Django项目如何获得SSL证书与配置HTTPS
Apr 30 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
PHP Mysql编程之高级技巧
2008/08/27 PHP
写php分页时出现的Fatal error的解决方法
2011/04/18 PHP
php数组声明、遍历、数组全局变量使用小结
2013/06/05 PHP
两个php日期控制类实例
2014/12/09 PHP
PHP动态柱状图实现方法
2015/03/30 PHP
Yii2实现ajax上传图片插件用法
2016/04/28 PHP
javascript Object与Function使用
2010/01/11 Javascript
基于Jquery的动态创建DOM元素的代码
2010/12/28 Javascript
Microsfot .NET Framework4.0框架 安装失败的解决方法
2013/08/14 Javascript
js禁止页面刷新禁止用F5键刷新禁止右键的示例代码
2013/09/23 Javascript
jQuery实现的Div窗口震动效果实例
2015/08/07 Javascript
VUE多层路由嵌套实现代码
2017/05/15 Javascript
详解jQuery中的easyui
2018/09/02 jQuery
vue+elementUI实现表单和图片上传及验证功能示例
2019/05/14 Javascript
jquery操作checkbox的常用方法总结【附测试源码下载】
2019/06/10 jQuery
Vue 2.0 侦听器 watch属性代码详解
2019/06/19 Javascript
Vue+Element-UI实现上传图片并压缩
2019/11/26 Javascript
Vue3 的响应式和以前有什么区别,Proxy 无敌?
2020/05/20 Javascript
[46:48]DOTA2上海特级锦标赛A组小组赛#2 Secret VS CDEC第三局
2016/02/25 DOTA
Python 实现随机数详解及实例代码
2017/04/15 Python
python+opencv实现动态物体追踪
2018/01/09 Python
python微信跳一跳系列之棋子定位像素遍历
2018/02/26 Python
批量将ppt转换为pdf的Python代码 只要27行!
2018/02/26 Python
使用django的objects.filter()方法匹配多个关键字的方法
2019/07/18 Python
使用Python为中秋节绘制一块美味的月饼
2019/09/11 Python
Python Django模板之模板过滤器与自定义模板过滤器示例
2019/10/18 Python
nginx+uwsgi+django环境搭建的方法步骤
2019/11/25 Python
Python正则表达式学习小例子
2020/03/03 Python
python 基于Apscheduler实现定时任务
2020/12/15 Python
韩国知名的家庭购物网站:CJmall
2016/08/01 全球购物
澳大利亚免息网上购物:Shop Zero
2016/09/17 全球购物
Java面试题及答案
2012/09/08 面试题
医学专业应届生的自我评价
2014/02/28 职场文书
高中军训第一天感言
2014/03/06 职场文书
《桥》教学反思
2014/04/09 职场文书
2014年物业管理工作总结
2014/11/21 职场文书