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 (1)
Oct 31 Python
详解Django框架中的视图级缓存
Jul 23 Python
Fabric 应用案例
Aug 28 Python
Python3.6 Schedule模块定时任务(实例讲解)
Nov 09 Python
django.db.utils.ProgrammingError: (1146, u“Table‘’ doesn’t exist”)问题的解决
Jul 13 Python
python 多个参数不为空校验方法
Feb 14 Python
python里dict变成list实例方法
Jun 26 Python
python中对数据进行各种排序的方法
Jul 02 Python
python基于Selenium的web自动化框架
Jul 14 Python
python原类、类的创建过程与方法详解
Jul 19 Python
Django REST framework 如何实现内置访问频率控制
Jul 23 Python
python实现图片转字符画的完整代码
Feb 21 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/06/04 PHP
php array_flip() 删除数组重复元素
2009/01/14 PHP
php表单提交问题的解决方法
2011/04/12 PHP
php跨服务器访问方法小结
2015/05/12 PHP
php生成复杂验证码(倾斜,正弦干扰线,黏贴,旋转)
2018/03/12 PHP
PHP基于swoole多进程操作示例
2019/08/12 PHP
PHP单文件上传原理及上传函数的封装操作示例
2019/09/02 PHP
PHP pthreads v3下同步处理synchronized用法示例
2020/02/21 PHP
提高代码性能技巧谈—以创建千行表格为例
2006/07/01 Javascript
下载站控制介绍字数显示的脚本 显示全部 隐藏介绍等功能
2009/09/19 Javascript
js特殊字符转义介绍
2013/11/05 Javascript
深入理解JavaScript系列(34):设计模式之命令模式详解
2015/03/03 Javascript
node.js [superAgent] 请求使用示例
2015/03/13 Javascript
实例解析Array和String方法
2016/12/14 Javascript
利用js给datalist或select动态添加option选项的方法
2018/01/25 Javascript
vue 全选与反选的实现方法(无Bug 新手看过来)
2018/02/09 Javascript
JavaScript捕捉事件和阻止冒泡事件实例分析
2018/08/03 Javascript
element-ui循环显示radio控件信息的方法
2018/08/24 Javascript
解决jQuery使用append添加的元素事件无效的问题
2018/08/30 jQuery
详解webpack之图片引入-增强的file-loader:url-loader
2018/10/08 Javascript
利用Vue实现简易播放器的完整代码
2020/12/30 Vue.js
Python实现可自定义大小的截屏功能
2018/01/20 Python
python3 图片referer防盗链的实现方法
2018/03/12 Python
Python get获取页面cookie代码实例
2018/09/12 Python
Python 图像对比度增强的几种方法(小结)
2019/09/25 Python
python Plotly绘图工具的简单使用
2020/03/03 Python
用CSS3的box-reflect来制作倒影效果
2016/11/15 HTML / CSS
如何使用html5与css3完成google涂鸦动画
2012/12/16 HTML / CSS
amazeui树节点自动展开折叠面板并选中第一个树节点的实现
2020/08/24 HTML / CSS
美国Jeep配件购物网站:Morris 4×4 Center
2019/05/01 全球购物
一家外企的面试题目(C/C++面试题,C语言面试题)
2014/03/24 面试题
机电专业求职信
2014/06/14 职场文书
普通党员四风问题对照检查材料
2014/09/27 职场文书
健康状况证明书
2014/11/26 职场文书
护林员个人总结
2015/03/04 职场文书
2015中秋节慰问信范文
2015/03/23 职场文书