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中redis的安装和使用
Dec 04 Python
python批量修改文件编码格式的方法
May 31 Python
解决pandas read_csv 读取中文列标题文件报错的问题
Jun 15 Python
Python中应该使用%还是format来格式化字符串
Sep 25 Python
python整小时 整天时间戳获取算法示例
Feb 20 Python
python3 json数据格式的转换(dumps/loads的使用、dict to str/str to dict、json字符串/字典的相互转换)
Apr 01 Python
python验证身份证信息实例代码
May 06 Python
Python内存映射文件读写方式
Apr 24 Python
Python基于network模块制作电影人物关系图
Jun 19 Python
python学习笔记之多进程
Aug 06 Python
Python getsizeof()和getsize()区分详解
Nov 20 Python
Python 发送SMTP邮件的简单教程
Jun 24 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循环检测目录是否存在并创建(循环创建目录)
2011/01/06 PHP
windows下开发并编译PHP扩展的方法
2011/03/18 PHP
Notice: Trying to get property of non-object problem(PHP)解决办法
2012/03/11 PHP
php实现的百度搜索某地天气的小偷代码
2014/04/23 PHP
PHP中的插件机制原理和实例
2014/07/08 PHP
codeigniter发送邮件并打印调试信息的方法
2015/03/21 PHP
PHP实现数组和对象的相互转换操作示例
2019/03/20 PHP
jQuery 图像裁剪插件Jcrop的简单使用
2009/05/22 Javascript
为jQuery.Treeview添加右键菜单的实现代码
2010/10/22 Javascript
jquery插件开发注意事项小结
2013/06/04 Javascript
JavaScript中的ParseInt("08")和“09”返回0的原因分析及解决办法
2016/05/19 Javascript
jQuery实现点击任意位置弹出层外关闭弹出层效果
2016/10/19 Javascript
vue路由组件按需加载的几种方法小结
2018/07/12 Javascript
提升node.js中使用redis的性能遇到的问题及解决方法
2018/10/30 Javascript
JS中使用cavas截图网页并解决跨域及模糊问题
2018/11/13 Javascript
Vue+axios+WebApi+NPOI导出Excel文件实例方法
2019/06/05 Javascript
element ui分页多选,翻页记忆的实例
2019/09/03 Javascript
jquery.tagsinput.js实现记录checkbox勾选的顺序
2019/09/21 jQuery
原生js实现密码强度验证功能
2020/03/18 Javascript
回调函数的意义以及python实现实例
2017/06/20 Python
Python实现GUI学生信息管理系统
2020/04/05 Python
打包python 加icon 去掉cmd黑窗口方法
2019/06/24 Python
如何利用Python开发一个简单的猜数字游戏
2019/09/22 Python
Django模板报TemplateDoesNotExist异常(亲测可行)
2020/12/18 Python
澳大利亚在线百货商店:Real Smart
2017/08/13 全球购物
英国50岁以上人群的交友网站:Ourtime
2018/03/28 全球购物
美团网旗下网上订餐平台:美团外卖
2020/03/05 全球购物
工作中的自我评价如何写好
2013/10/28 职场文书
中学生爱国演讲稿
2013/12/31 职场文书
全民健身日活动方案
2014/01/29 职场文书
2014银行授权委托书样本
2014/10/04 职场文书
2014年个人售房协议书
2014/10/30 职场文书
党员身份证明材料
2015/06/19 职场文书
放飞理想主题班会
2015/08/14 职场文书
TV动画《间谍过家家》公开PV
2022/03/20 日漫
详解Flutter自定义应用程序内键盘的实现方法
2022/06/14 Java/Android