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使用MD5加密字符串示例
Aug 22 Python
Python __setattr__、 __getattr__、 __delattr__、__call__用法示例
Mar 06 Python
Python 3中的yield from语法详解
Jan 18 Python
python如何生成网页验证码
Jul 28 Python
python 为什么说eval要慎用
Mar 26 Python
python区分不同数据类型的方法
Oct 14 Python
python numpy 反转 reverse示例
Dec 04 Python
Pytorch实现神经网络的分类方式
Jan 08 Python
Django model重写save方法及update踩坑详解
Jul 27 Python
python 常见的反爬虫策略
Sep 27 Python
python实现录音功能(可随时停止录音)
Oct 26 Python
opencv用VS2013调试时用Image Watch插件查看图片
Jul 26 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
一个用于MySQL的PHP XML类
2006/10/09 PHP
完美解决:Apache启动问题―(OS 10022)提供了一个无效的参数
2013/06/08 PHP
PHP中定义数组常量(array常量)的方法
2014/11/17 PHP
PHP strcmp()和strcasecmp()的区别实例
2016/11/05 PHP
javascript 一些用法小结
2009/09/11 Javascript
屏蔽IE弹出"您查看的网页正在试图关闭窗口,是否关闭此窗口"的方法
2013/12/31 Javascript
CSS3实现动态背景登录框的代码
2015/07/28 Javascript
JS实现DIV容器赋值的方法
2015/12/14 Javascript
学习使用AngularJS文件上传控件
2016/02/16 Javascript
jquery插件autocomplete用法示例
2016/07/01 Javascript
最全面的JS倒计时代码
2016/09/17 Javascript
jquery获取easyui日期控件的值实现方法
2016/11/09 Javascript
Node.js中看JavaScript的引用
2017/04/22 Javascript
angularjs中使用ng-bind-html和ng-include的实例
2017/04/28 Javascript
ionic实现底部分享功能
2017/05/11 Javascript
NW.js 简介与使用方法
2018/02/01 Javascript
基于vue的tab-list类目切换商品列表组件的示例代码
2020/02/14 Javascript
Vue使用Proxy代理后仍无法生效的解决
2020/11/13 Javascript
python 接口测试response返回数据对比的方法
2018/02/11 Python
python 实现在tkinter中动态显示label图片的方法
2019/06/13 Python
Django使用模板后无法找到静态资源文件问题解决
2019/07/19 Python
python十进制转二进制的详解
2020/02/07 Python
Python使用qrcode二维码库生成二维码方法详解
2020/02/17 Python
tensorflow与numpy的版本兼容性问题的解决
2021/01/08 Python
html5 video标签屏蔽右键视频另存为的js代码
2013/11/12 HTML / CSS
美国体育用品商店:Paragon Sports
2017/10/08 全球购物
日本最大的药妆连锁店:Matsukiyo松本清药妆店
2017/11/23 全球购物
Manduka官网:瑜伽垫、瑜伽毛巾和服装
2018/07/02 全球购物
一站式跨境收款解决方案:Payoneer(派安盈)
2018/09/06 全球购物
马来西亚最热门的在线时尚商店:FashionValet
2018/11/11 全球购物
PPP协议组成及简述协议协商的基本过程
2015/05/28 面试题
中学教师自我鉴定
2014/02/07 职场文书
业务部门经理岗位职责
2014/02/23 职场文书
信息与计算机科学职业规划范文:成为一艘有方向的船
2014/09/11 职场文书
浅谈redis缓存在项目中的使用
2021/05/20 Redis
Tomcat执行startup.bat出现闪退的原因及解决办法
2022/04/20 Servers