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编写简单文件夹内图片浏览工具
Aug 17 Python
在Mac下使用python实现简单的目录树展示方法
Nov 01 Python
对python:print打印时加u的含义详解
Dec 15 Python
Python零基础入门学习之输入与输出
Apr 03 Python
Python中那些 Pythonic的写法详解
Jul 02 Python
python线程的几种创建方式详解
Aug 29 Python
如何获取Python简单for循环索引
Nov 21 Python
Python之——生成动态路由轨迹图的实例
Nov 22 Python
python3 assert 断言的使用详解 (区别于python2)
Nov 27 Python
python3实现无权最短路径的方法
May 12 Python
Python 处理表格进行成绩排序的操作代码
Jul 26 Python
python opencv将多个图放在一个窗口的实例详解
Feb 28 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实现多级树型菜单
2006/10/09 PHP
在线增减.htpasswd内的用户
2006/10/09 PHP
php 无限级分类 获取顶级分类ID
2016/03/13 PHP
值得分享的php+ajax实时聊天室
2016/07/20 PHP
tbody元素支持嵌套的注意方法
2007/03/24 Javascript
如何阻止复制剪切和粘贴事件为了表单内容的安全
2013/05/23 Javascript
JavaSript中变量的作用域闭包的深入理解
2014/05/12 Javascript
JavaScript中停止执行setInterval和setTimeout事件的方法
2015/05/14 Javascript
AngularJS入门教程之多视图切换用法示例
2016/11/02 Javascript
jquery心形点赞关注效果的简单实现
2016/11/14 Javascript
JavaScript实现三级联动菜单实例代码
2017/06/26 Javascript
Node.js+jade抓取博客所有文章生成静态html文件的实例
2017/09/19 Javascript
深入koa-bodyparser原理解析
2019/01/16 Javascript
解决layui下拉框监听问题(监听不到值的变化)
2019/09/28 Javascript
javascript设计模式 ? 访问者模式原理与用法实例分析
2020/04/26 Javascript
详解Vue 数据更新了但页面没有更新的 7 种情况汇总及延伸总结
2020/05/28 Javascript
Python中关于使用模块的基础知识
2015/05/24 Python
Python中super函数的用法
2017/11/17 Python
Python实现的knn算法示例
2018/06/14 Python
python实现周期方波信号频谱图
2018/07/21 Python
Python实现输入二叉树的先序和中序遍历,再输出后序遍历操作示例
2018/07/27 Python
将Django项目部署到CentOs服务器中
2018/10/18 Python
Python在图片中插入大量文字并且自动换行
2019/01/02 Python
Django 静态文件配置过程详解
2019/07/23 Python
Python Django 命名空间模式的实现
2019/08/09 Python
Pandas —— resample()重采样和asfreq()频度转换方式
2020/02/26 Python
Django自定义YamlField实现过程解析
2020/11/11 Python
python 通过 pybind11 使用Eigen加速代码的步骤
2020/12/07 Python
英国在线泳装店:Simply Swim
2019/05/05 全球购物
心理健康课教学反思
2014/02/13 职场文书
2014年酒店前台工作总结
2014/11/14 职场文书
模范班主任事迹材料
2014/12/17 职场文书
公司表扬信格式
2015/05/04 职场文书
大学军训通讯稿
2015/07/18 职场文书
2016党员党课心得体会
2016/01/07 职场文书
常用的Python代码调试工具总结
2021/06/23 Python