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的Twisted框架实现一个简单的服务器
Apr 16 Python
在Python中操作字符串之replace()方法的使用
May 19 Python
在阿里云服务器上配置CentOS+Nginx+Python+Flask环境
Jun 18 Python
python 计算文件的md5值实例
Jan 13 Python
python3使用PyMysql连接mysql数据库实例
Feb 07 Python
由浅入深讲解python中的yield与generator
Apr 05 Python
微信跳一跳python辅助脚本(总结)
Jan 11 Python
python实现在图片上画特定大小角度矩形框
Oct 24 Python
Python数据可视化:饼状图的实例讲解
Dec 07 Python
使用Python操作ArangoDB的方法步骤
Feb 02 Python
Python基于Socket实现简单聊天室
Feb 17 Python
python 利用 PIL 将数组值转成图片的实现
Apr 12 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 中include()与require()的对比
2006/10/09 PHP
Windows IIS PHP 5.2 安装与配置方法
2009/06/08 PHP
php实现与erlang的二进制通讯实例解析
2014/07/23 PHP
让Laravel API永远返回JSON格式响应的方法示例
2018/09/05 PHP
PHP扩展Swoole实现实时异步任务队列示例
2019/04/13 PHP
JS中style属性
2006/10/11 Javascript
随机显示经典句子或诗歌的javascript脚本
2007/08/04 Javascript
jquery 锁定弹出层实现代码
2010/02/23 Javascript
修改jquery.lazyload.js实现页面延迟载入
2010/12/22 Javascript
拉动滚动条加载数据的jquery代码
2012/05/03 Javascript
JavaScript基础知识学习笔记
2014/12/02 Javascript
JS实现的数组全排列输出算法
2015/03/19 Javascript
JavaScript中操作Mysql数据库实例
2015/04/02 Javascript
js行号显示的文本框实现效果(兼容多种浏览器 )
2015/10/23 Javascript
AngularJS内建服务$location及其功能详解
2016/07/01 Javascript
JS 实现可停顿的垂直滚动实例代码
2016/11/23 Javascript
无阻塞加载js,防止因js加载不了影响页面显示的问题
2016/12/18 Javascript
Bootstrap table学习笔记(2) 前后端分页模糊查询
2017/05/18 Javascript
第一个Vue插件从封装到发布
2017/11/22 Javascript
微信小程序日期时间选择器使用方法
2018/02/01 Javascript
vue :src 文件路径错误问题的解决方法
2018/05/15 Javascript
开发中常用的25个JavaScript单行代码(小结)
2019/06/28 Javascript
JS中间件设计模式的深入探讨与实例分析
2020/04/11 Javascript
js中复选框的取值及赋值示例详解
2020/10/18 Javascript
Python基础语言学习笔记总结(精华)
2017/11/14 Python
浅谈django三种缓存模式的使用及注意点
2018/09/30 Python
Python 获取div标签中的文字实例
2018/12/20 Python
使用Template格式化Python字符串的方法
2019/01/22 Python
Pycharm2020.1安装无法启动问题即设置中文插件的方法
2020/08/07 Python
企事业单位求职者的自我评价
2013/12/28 职场文书
行政撤诉申请书
2015/05/18 职场文书
小学教师教学反思
2016/02/24 职场文书
导游词之重庆渣滓洞
2020/01/08 职场文书
Python机器学习之KNN近邻算法
2021/05/14 Python
分析MySQL抛出异常的几种常见解决方式
2021/05/18 MySQL
Vue和Flask通信的实现
2021/05/19 Vue.js