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

 更新时间:2020年03月08日 14:05:59   作者:jia666666  
这篇文章主要介绍了python GUI库图形界面开发之PyQt5多线程中信号与槽的详细使用方法与实例,需要的朋友可以参考下

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_())

运行如下

主线程与子线程的使用

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

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_())

运行程序,效果如下

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

相关文章

  • Python创建字典的八种方式

    Python创建字典的八种方式

    今天小编就为大家分享一篇关于Python创建字典的八种方式,小编觉得内容挺不错的,现在分享给大家,具有很好的参考价值,需要的朋友一起跟随小编来看看吧
    2019-02-02
  • python动态视频下载器的实现方法

    python动态视频下载器的实现方法

    这里向大家分享一下python爬虫的一些应用,主要是用爬虫配合简单的GUI界面实现视频,音乐和小说的下载器。今天就先介绍如何实现一个动态视频下载器,需要的朋友可以参考下
    2019-09-09
  • 利用aardio给python编写图形界面

    利用aardio给python编写图形界面

    这篇文章主要为大家详细介绍了利用aardio给python编写图形界面的方法,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2017-08-08
  • Python PyQt5-图形界面的美化操作

    Python PyQt5-图形界面的美化操作

    这篇文章主要介绍了Python PyQt5-图形界面的美化操作,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2021-03-03
  • 对pyqt5中QTabWidget的相关操作详解

    对pyqt5中QTabWidget的相关操作详解

    今天小编就为大家分享一篇对pyqt5中QTabWidget的相关操作详解,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2019-06-06
  • 详解Python中dbm模块和shelve模块的使用

    详解Python中dbm模块和shelve模块的使用

    这篇文章主要为大家详细介绍了Python中dbm模块和shelve模块的具体用法,文中的示例代码简洁易懂,对我们深入学习Python有一定的帮助,需要的可以参考下
    2023-10-10
  • Python自带的IDE在哪里

    Python自带的IDE在哪里

    在本篇内容里小编给大家分享的是关于如何找到Python自带的IDE的相关内容,有兴趣的朋友们可以学习下。
    2020-07-07
  • Python 循环缓冲区

    Python 循环缓冲区

    Python 循环缓冲区是一种快速高效的数据存储方式。 循环数据缓冲区是一个队列,可以用作容纳单个对象的容器,这篇文章主要介绍了Python 循环缓冲区,需要的朋友可以参考下
    2023-09-09
  • Python调用Pandas实现Excel读取

    Python调用Pandas实现Excel读取

    这篇文章主要为大家介绍了在Python中如何调用Pandas实现Excel文件的读取,文中的示例代码讲解详细,感兴趣的小伙伴可以了解一下
    2022-04-04
  • 利用python解决mysql视图导入导出依赖的问题

    利用python解决mysql视图导入导出依赖的问题

    这篇文章主要给大家介绍了关于利用python解决mysql视图导入导出依赖的问题,文中通过示例代码介绍的非常详细,对大家学习或者使用python具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧。
    2017-12-12

最新评论