渣渣用法,请等待我心情好的时候更新。

1.第一个例子

1.1 先看mainwindow.py

from PyQt5 importQtCore, QtGui, QtWidgetsclassUi_MainWindow(object):defsetupUi(self, MainWindow):

MainWindow.setObjectName("MainWindow")

MainWindow.resize(640, 320)

self.centralwidget=QtWidgets.QWidget(MainWindow)

self.centralwidget.setObjectName("centralwidget")

self.textBrowser=QtWidgets.QTextBrowser(self.centralwidget)

self.textBrowser.setGeometry(QtCore.QRect(0, 0,320, 320))

self.textBrowser.setObjectName("textBrowser")

self.pushButton=QtWidgets.QPushButton(self.centralwidget)

self.pushButton.setGeometry(QtCore.QRect(450, 150, 75, 23))

self.pushButton.setObjectName("pushButton")

MainWindow.setCentralWidget(self.centralwidget)

self.retranslateUi(MainWindow)

self.pushButton.clicked.connect(MainWindow.start)

QtCore.QMetaObject.connectSlotsByName(MainWindow)defretranslateUi(self, MainWindow):

_translate=QtCore.QCoreApplication.translate

MainWindow.setWindowTitle(_translate("MainWindow", "MainWindow"))

self.pushButton.setText(_translate("MainWindow", "开始"))

定义了一个窗口UI_MainWindow,有一个textBrowser,有一个pushButton

pushButton点击连接到MainWindow.start

1.2 看main.py

importsys, timefrom PyQt5 importQtWidgetsfrom PyQt5.QtCore importQTimer, QThread, pyqtSignalfrom mainwindow importUi_MainWindowclassMainWindow(QtWidgets.QMainWindow, Ui_MainWindow):def __init__(self, parent=None):

super(MainWindow, self).__init__(parent=parent)

self.setupUi(self)defstart(self):

time.sleep(2)

self.textBrowser.append('test1')if __name__ == "__main__":

app=QtWidgets.QApplication(sys.argv)

w=MainWindow()

w.show()

sys.exit(app.exec_())

简单的继承UI_MainWindow,并且定义了MainWindow.start,延迟两秒给textBrowser写进test

2.引入QTimer

QTimer是一个定时任务,可以在指定的时间运行制定的函数,电子钟示例都用的它。

我要用它来实现窗口加载完毕后就自动执行的任务,一般是程序的自检任务。

2.1看main.py

importsys, timefrom PyQt5 importQtWidgetsfrom PyQt5.QtCore importQTimer, QThread, pyqtSignalfrom mainwindow importUi_MainWindowclassMainWindow(QtWidgets.QMainWindow, Ui_MainWindow):def __init__(self, parent=None):

super(MainWindow, self).__init__(parent=parent)

self.setupUi(self)#初始化一个定时器

self.timer =QTimer(self)#定义时间超时连接start_app

self.timer.timeout.connect(self.start)#定义时间任务是一次性任务

self.timer.setSingleShot(True)#启动时间任务

self.timer.start()defstart(self):

time.sleep(2)

self.textBrowser.append('test1')if __name__ == "__main__":

app=QtWidgets.QApplication(sys.argv)

w=MainWindow()

w.show()

sys.exit(app.exec_())

增加的4行就能实现启动即执行。

但是问题是,都执行完MainWindow.start,窗体才显现出来。这个体验可是真差了。

3.引入QThread

QThread是一个多线程调度器,和python的threading性质一样,看名字都像。

3.1 看main.py

importsys, timefrom PyQt5 importQtWidgetsfrom PyQt5.QtCore importQTimer, QThread, pyqtSignalfrom mainwindow importUi_MainWindowclassMainWindow(QtWidgets.QMainWindow, Ui_MainWindow):def __init__(self, parent=None):

super(MainWindow, self).__init__(parent=parent)

self.setupUi(self)#初始化一个定时器

self.timer =QTimer(self)#定义时间超时连接start_app

self.timer.timeout.connect(self.start)#定义时间任务是一次性任务

self.timer.setSingleShot(True)#启动时间任务

self.timer.start()#实例化一个线程

self.work =WorkThread()#多线程的信号触发连接到UpText

self.work.trigger.connect(self.UpText)defstart(self):#time.sleep(2)

#self.textBrowser.append('test1')

#启动另一个线程

self.work.start()defUpText(self, str):

time.sleep(2)

self.textBrowser.append('test2')classWorkThread(QThread):#定义一个信号

trigger =pyqtSignal(str)def __int__(self):#初始化函数,默认

super(WorkThread, self).__init__()defrun(self):

time.sleep(5)#等待5秒后,给触发信号,并传递test

self.trigger.emit('test2')if __name__ == "__main__":

app=QtWidgets.QApplication(sys.argv)

w=MainWindow()

w.show()

sys.exit(app.exec_())

3.2讲解一下对这个程序的理解:

窗口启动后,用QTimer启动一个一次性任务MainWindow.start

MainWindow.start,则是通过QThread启动另一个线程 WrokThread.run

WrokThread.run触发一个信号WrokThread.tragger,并传入字符串‘test2’

MainWindow中的work是实例化的WrokThread

work.trigger连接到MainWindow.UpText

执行了MainWindow.UpText,就更新了textBrowser

由于是多线程执行,一个线程再展示GUI窗口,另一个线程在执行WrokThread.run,所以GUI窗口无卡顿了。

python qt5 数据改变 触发信号_pyqt5 使用 QTimer, QThread, pyqtSignal 实现自动执行,多线程,自定义信号触发。...相关推荐

  1. pyqt5 使用 QTimer, QThread, pyqtSignal 实现自动执行,多线程,自定义信号触发。

    渣渣用法,请等待我心情好的时候更新. 1.第一个例子 1.1 先看mainwindow.py from PyQt5 import QtCore, QtGui, QtWidgetsclass Ui_Ma ...

  2. python qt5 数据改变 触发信号_pyqt5自定义信号实例解析

    本文研究的主要是pyqt5自定义信号实例解析的相关内容,具体介绍如下. PyQt5已经自动定义了很多QT内建的信号.但是在实际的使用中为了灵活使用信号与槽机制,我们可以根据需要自定义signal.可以 ...

  3. python制作ppt改变颜色标题_摆脱千篇一律的PPT字体和颜色,自定义设置

    据说使用PPT的小白们约90%的是不会用自定义的,不知是真是假? 比如,字体和颜色设置这是PPT中最频繁的操作之一,如果这是你经常要设置字体和颜色的话,建议你还是掌握自定义设置比较好,因为它能省时省力 ...

  4. 如何将Python脚本转换为exe,双击exe自动执行Python脚本功能

    前言 本文是该专栏的第8篇,后面会持续分享python的各种干货知识,值得关注. 相信很多同学在工作上,或多或少遇到过这样的需求,如下: 需要你使用python开发一个功能(如爬虫,或者数据分析,又或 ...

  5. python qt5 gui快速编程_现货正版 Python Qt GUI与数据可视化编程 pyqt5教程书籍 pyqt5快速开发与实战Qt5 GUI快速编程 计算机网络程序设计人民邮电出版社...

    热销单品 查看更多 > RMB:85.00 立即购买 RMB:63.50 立即购买 RMB:73.50 立即购买 RMB:49.50 立即购买 RMB:127.80 立即购买 RMB:66.00 ...

  6. python图表excel数据改变_如何不让Excel图表随源数据改变而改变

    一般我们在用Excel时,经常会碰到一些问题,比如,如何才能不让Excel图表随源数据改变而改变呢,下面就谈一下,一般在默认情况下,Excel的图表在一个区域中存放数据,如果改变该区域中的数据,图表就 ...

  7. qwidget show 是否有信号_PyQt5信号与槽机制入门(一)

    信号(Signal)与槽(Slot)是Qt中的核心机制,也是在PyQt编程中对象之间进行通信的机制.当事件或者状态发生改变时,就会发出信号,信号会触发所有与这个事件(信号)相关的函数(槽):一个信号可 ...

  8. 【项目实训】基于人脸识别的课堂签到管理系统(python+qt5+sqlite3+百度智能云)

    [项目实训]基于人脸识别的课堂签到管理系统(python+qt5+sqlite3+百度智能云) 一.环境介绍 二.签到功能 2.1 启动签到 2.2 结束签到 三.用户组操作 3.1 添加用户组 3. ...

  9. python 处理数据小工具_用Python这个小工具,一次性把论文作图与数据处理全部搞定!...

    原标题:用Python这个小工具,一次性把论文作图与数据处理全部搞定! 一入科研深似海-- 随着大学纷纷开学,"防脱发用生姜还是黑芝麻?", 研究僧们又开始为自己所剩无几的头发发愁 ...

最新文章

  1. 算法复习之坐标离散化
  2. python 字符串split 正则分割 换行符_python数据分析实战-JOINamp;SPLIT分割与合并
  3. matlab特征点数量,特征点检测效果评估(matlab代码)
  4. [密码学基础][每个信息安全博士生应该知道的52件事][Bristol Cryptography][第30篇]大致简述密钥协商中的BR安全定义
  5. jsp内置对象(四)-----session对象
  6. 想法记录---实时计算的TopN的实现
  7. python搭建selenium_自动化测试之路3-selenium3+python3环境搭建
  8. 通过深度优先搜索(DFS)对图的边进行分类
  9. Pheatmap做热图数据处理过程
  10. 脑子好,蹦两下!--程序员应该玩的小游戏
  11. C# WinForm 使用FlowLayoutPanel控件做为导航菜单按钮的容器
  12. 网络硬件常识:光模块
  13. 软件测试工程师自我介绍范文_软件测试面试自我介绍
  14. 萨尔大学计算机受限,萨尔大学的申请条件
  15. python Django 模型操作
  16. 关于emWin显示矢量字体TTF所踩的坑
  17. dbase_create、dbase使用小结
  18. Python合并同文件夹下面Excel文件并且求和汇总
  19. xwiki开发指南1-使用XWiki创建FAQ应用
  20. 求助找不到指定的模块。 (异常来自 HRESULT:0x8007007E)

热门文章

  1. Photoshop笔刷|如何正确导入笔刷?
  2. 为双十二灵感设计屯好素材!
  3. 素材路上|专注平面设计素材模板,可能会让你抛弃花瓣!
  4. 大火金九银十!秋季借势海报PSD分层模板,看谁最能俘获你的心
  5. python主讲移动端自动化测试框架appium_Appium-移动端自动测试框架,如何入门?...
  6. Windows下判断文件是否存在
  7. namespace关键字-1
  8. 《代码大全》代码生成
  9. python windows 客户端开发_如何在Windows上使用Python进行开发
  10. 信号方面概念解释(笔记04)