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 urlopen()函数 示例分享
Jun 12 Python
用Python制作在地图上模拟瘟疫扩散的Gif图
Mar 31 Python
Python3实现简单可学习的手写体识别(实例讲解)
Oct 21 Python
python按行读取文件,去掉每行的换行符\n的实例
Apr 19 Python
Python基于property实现类的特性操作示例
Jun 15 Python
python通过链接抓取网站详解
Nov 20 Python
Python实现变声器功能(萝莉音御姐音)
Dec 05 Python
Python实现栈的方法详解【基于数组和单链表两种方法】
Feb 22 Python
django queryset 去重 .distinct()说明
May 19 Python
django form和field具体方法和属性说明
Jul 09 Python
六种酷炫Python运行进度条效果的实现代码
Jul 17 Python
基于python+selenium自动健康打卡的实现代码
Jan 13 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
杏林同学录(七)
2006/10/09 PHP
php匹配字符中链接地址的方法
2014/12/22 PHP
php实现按照权重随机排序数据的方法
2015/01/09 PHP
weiphp微信公众平台授权设置
2016/01/04 PHP
PHP安装扩展mcrypt以及相关依赖项深入讲解
2021/03/04 PHP
24款非常有用的 jQuery 插件分享
2011/04/06 Javascript
JS的replace方法介绍
2012/10/20 Javascript
Javascript中的异步编程规范Promises/A详细介绍
2014/06/06 Javascript
JS实现在页面随时自定义背景颜色的方法
2015/02/27 Javascript
js实现新年倒计时效果
2015/12/10 Javascript
学习JavaScript设计模式之状态模式
2016/01/08 Javascript
浅谈html转义及防止javascript注入攻击的方法
2016/12/04 Javascript
vue select二级联动第二级默认选中第一个option值的实例
2018/01/10 Javascript
JavaScript去掉数组重复项的方法分析【测试可用】
2018/07/19 Javascript
Nuxt.js开启SSR渲染的教程详解
2018/11/30 Javascript
浅谈vuex actions和mutation的异曲同工
2018/12/13 Javascript
Vue中全局变量的定义和使用
2019/06/05 Javascript
vue自定义switch开关组件,实现样式可自行更改
2019/11/01 Javascript
[51:17]Mski vs VGJ.S Supermajor小组赛C组 BO3 第三场 6.3
2018/06/04 DOTA
python使用两种发邮件的方式smtp和outlook示例
2017/06/02 Python
Django如何实现内容缓存示例详解
2017/09/24 Python
python使用KNN算法识别手写数字
2019/04/25 Python
python的json中方法及jsonpath模块用法分析
2019/12/06 Python
python多进程重复加载的解决方式
2019/12/13 Python
keras实现调用自己训练的模型,并去掉全连接层
2020/06/09 Python
Selenium及python实现滚动操作多种方法
2020/07/21 Python
La Senza官网:北美顶尖性感内衣品牌
2018/08/03 全球购物
日本动漫周边服饰销售网站:Atsuko
2019/12/16 全球购物
城建学院毕业生自荐信
2014/01/31 职场文书
优秀教师的感人事迹
2014/02/04 职场文书
2014年基层党组织公开承诺书
2014/03/29 职场文书
《北大荒的秋天》教学反思
2014/04/14 职场文书
优秀的个人求职信范文
2014/05/09 职场文书
解决Pytorch半精度浮点型网络训练的问题
2021/05/24 Python
Python实现简繁体转换
2021/06/07 Python
java中如何截取字符串最后一位
2022/07/07 Java/Android