PyQt5事件处理之定时在控件上显示信息的代码


Posted in Python onMarch 25, 2020

有时候为了体现延时效果,或者是多事件处理,需要在窗口的文本编辑框或者表格等控件中,延迟几秒或每隔几秒显示输出一段数据,又或者可以说是每隔几秒执行下一行代码!要实现这种效果,关键的两个方法就是time.sleep()processEvents(),具体看如下代码:

from PyQt5 import QtCore, QtGui, QtWidgets
import sys
from PyQt5.QtWidgets import *
import time
class Ui_MainWindow(object):
 def setupUi(self, MainWindow):
  MainWindow.setObjectName("MainWindow")
  MainWindow.resize(390, 500)
  self.centralwidget = QtWidgets.QWidget(MainWindow)
  self.centralwidget.setObjectName("centralwidget")
  self.gridLayout_2 = QtWidgets.QGridLayout(self.centralwidget)
  self.gridLayout_2.setObjectName("gridLayout_2")
  self.gridLayout = QtWidgets.QGridLayout()
  self.gridLayout.setObjectName("gridLayout")
  self.textEdit = QtWidgets.QTextEdit(self.centralwidget)
  self.textEdit.setObjectName("textEdit")
  self.gridLayout.addWidget(self.textEdit, 1, 1, 1, 1)
  self.tableWidget = QtWidgets.QTableWidget(self.centralwidget)
  self.tableWidget.setObjectName("tableWidget")
  self.tableWidget.setColumnCount(3)
  self.tableWidget.setRowCount(4)
  item = QtWidgets.QTableWidgetItem()
  self.tableWidget.setVerticalHeaderItem(0, item)
  item = QtWidgets.QTableWidgetItem()
  self.tableWidget.setVerticalHeaderItem(1, item)
  item = QtWidgets.QTableWidgetItem()
  self.tableWidget.setVerticalHeaderItem(2, item)
  item = QtWidgets.QTableWidgetItem()
  self.tableWidget.setVerticalHeaderItem(3, item)
  item = QtWidgets.QTableWidgetItem()
  self.tableWidget.setHorizontalHeaderItem(0, item)
  item = QtWidgets.QTableWidgetItem()
  self.tableWidget.setHorizontalHeaderItem(1, item)
  item = QtWidgets.QTableWidgetItem()
  self.tableWidget.setHorizontalHeaderItem(2, item)
  self.gridLayout.addWidget(self.tableWidget, 0, 1, 1, 1)
  self.pushButton = QtWidgets.QPushButton(self.centralwidget)
  self.pushButton.setMaximumSize(QtCore.QSize(200, 16777215))
  self.pushButton.setObjectName("pushButton")
  self.gridLayout.addWidget(self.pushButton, 2, 1, 1, 1)
  self.gridLayout_2.addLayout(self.gridLayout, 0, 0, 1, 1)
  MainWindow.setCentralWidget(self.centralwidget)
  self.menubar = QtWidgets.QMenuBar(MainWindow)
  self.menubar.setGeometry(QtCore.QRect(0, 0, 800, 18))
  self.menubar.setObjectName("menubar")
  MainWindow.setMenuBar(self.menubar)
  self.statusbar = QtWidgets.QStatusBar(MainWindow)
  self.statusbar.setObjectName("statusbar")
  MainWindow.setStatusBar(self.statusbar)
  # 表格属性设置
  self.tableWidget.horizontalHeader().setSectionResizeMode(QtWidgets.QHeaderView.Stretch)
  # 【开始】按钮
  self.pushButton.clicked.connect(self.pushButton_Clicked)
  self.retranslateUi(MainWindow)
  QtCore.QMetaObject.connectSlotsByName(MainWindow)
 # 设置每隔几秒输出数据
 def pushButton_Clicked(self):
  self.textEdit.setText("获取基金数据中...")
  # 刷新页面
  QApplication.processEvents()
  item = [["110003", "易方达上证50", "-1.97%"], ["005918", "天弘沪深300", "-3.15%"], ["001513", "易方达信息产业", "-4.69%"]]
  for i in range(3):
   # 每隔两秒执行一次以下代码,直到循环结束
   time.sleep(2)
   self.textEdit.append("获取基金" + item[i][1] + "\n...")
   for j in range(3):
    self.tableWidget.setItem(i, j, QtWidgets.QTableWidgetItem(item[i][j]))
   # 刷新页面
   QtWidgets.QApplication.processEvents()
 def retranslateUi(self, MainWindow):
  _translate = QtCore.QCoreApplication.translate
  MainWindow.setWindowTitle(_translate("MainWindow", "MainWindow"))
  item = self.tableWidget.verticalHeaderItem(0)
  item.setText(_translate("MainWindow", "1"))
  item = self.tableWidget.verticalHeaderItem(1)
  item.setText(_translate("MainWindow", "2"))
  item = self.tableWidget.verticalHeaderItem(2)
  item.setText(_translate("MainWindow", "3"))
  item = self.tableWidget.verticalHeaderItem(3)
  item.setText(_translate("MainWindow", "4"))
  item = self.tableWidget.horizontalHeaderItem(0)
  item.setText(_translate("MainWindow", "基金编号"))
  item = self.tableWidget.horizontalHeaderItem(1)
  item.setText(_translate("MainWindow", "基金名称"))
  item = self.tableWidget.horizontalHeaderItem(2)
  item.setText(_translate("MainWindow", "基金净值"))
  self.pushButton.setText(_translate("MainWindow", "开始"))

if __name__ == "__main__":
 app = QApplication(sys.argv)
 MainWindow = QtWidgets.QMainWindow()
 ui = Ui_MainWindow()
 ui.setupUi(MainWindow)
 MainWindow.show()
 sys.exit(app.exec_())

其中关键代码如下,需要设计一个循环才能实现每隔2秒执行一次循环中的代码,至于为何要调用两次刷新页面的函数,是因为每调用一次QApplication.processEvents()就会刷新页面,将之前在窗口显示数据的代码的效果全部显示到窗口中,而在循环之前有一个输出到文本框的文字需要首先显示,所以在循环之前刷新一次页面,否则就会和循环第一次的内容一起出现!而第二次调用这个函数则是将循环中每隔2秒执行的那几行代码产生的效果显示出来,其中输出文本框采用append()是为了不覆盖之前的文字。

# 设置每隔几秒输出数据
 def pushButton_Clicked(self):
  self.textEdit.setText("获取基金数据中...")
  # 刷新页面
  QApplication.processEvents()
  item = [["110003", "易方达上证50", "-1.97%"], ["005918", "天弘沪深300", "-3.15%"], ["001513", "易方达信息产业", "-4.69%"]]
  for i in range(3):
   # 每隔两秒执行一次以下代码,直到循环结束
   time.sleep(2)
   self.textEdit.append("获取基金" + item[i][1] + "\n...")
   for j in range(3):
    self.tableWidget.setItem(i, j, QtWidgets.QTableWidgetItem(item[i][j]))
   # 刷新页面
   QtWidgets.QApplication.processEvents()

运行结果如下图所示(内容以基金的净值为例,以此纪念我这段艰难入坑基金的岁月,呜呜呜,跌穿谷底噜):因为不是动图,实际显示的效果是:点击【开始】按钮后,首先文本框显示第一行文字,然后隔2秒后显示第二三行文字,同时在表格中显示第一行的信息,再隔2秒就是文本框第四五行文字以及表格第二行信息,以此类推,直到循环结束!

PyQt5事件处理之定时在控件上显示信息的代码

虽然PyQt5中有自己的定时器QTimer,但是我暂时没有想到如何用它来实现上述的效果,因此就没有使用该方法,如有更好的方法欢迎大神指点!

总结

到此这篇关于PyQt5事件处理之定时在控件上显示信息的代码的文章就介绍到这了,更多相关PyQt5事件处理内容请搜索三水点靠木以前的文章或继续浏览下面的相关文章希望大家以后多多支持三水点靠木!

Python 相关文章推荐
Python中函数及默认参数的定义与调用操作实例分析
Jul 25 Python
python 调用c语言函数的方法
Sep 29 Python
详解Python连接MySQL数据库的多种方式
Apr 16 Python
Python socket模块方法实现详解
Nov 05 Python
浅谈tensorflow 中tf.concat()的使用
Feb 07 Python
Python3 shutil(高级文件操作模块)实例用法总结
Feb 19 Python
使用python实现多维数据降维操作
Feb 24 Python
CentOS 7如何实现定时执行python脚本
Jun 24 Python
python文件编写好后如何实践
Jul 07 Python
基于Python的一个自动录入表格的小程序
Aug 05 Python
pycharm 的Structure界面设置操作
Feb 05 Python
python turtle绘制多边形和跳跃和改变速度特效
Mar 16 Python
基于Python计算圆周率pi代码实例
Mar 25 #Python
Python异常原理及异常捕捉实现过程解析
Mar 25 #Python
Python导入模块包原理及相关注意事项
Mar 25 #Python
Python脚本导出为exe程序的方法
Mar 25 #Python
Python实现猜年龄游戏代码实例
Mar 25 #Python
python读取mysql数据绘制条形图
Mar 25 #Python
Python环境下安装PyGame和PyOpenGL的方法
Mar 25 #Python
You might like
php预定义常量
2006/12/25 PHP
php获取后台Job管理的实现代码
2011/06/10 PHP
Yii入门教程之Yii安装及hello world
2014/11/25 PHP
PHP中的闭包(匿名函数)浅析
2015/02/07 PHP
php通过array_merge()函数合并两个数组的方法
2015/03/18 PHP
javascript 弹出的窗口返回值给父窗口具体实现
2013/11/23 Javascript
jQuery实现下拉框左右选择的简单实例
2014/02/22 Javascript
JS实现固定在右下角可展开收缩DIV层的方法
2015/02/13 Javascript
JS实现点击文字对应DIV层不停闪动效果的方法
2015/03/02 Javascript
jQuery结合AJAX之在页面滚动时从服务器加载数据
2015/06/30 Javascript
分享Javascript实用方法二
2015/12/13 Javascript
三种带箭头提示框总结实例
2016/06/14 Javascript
JS 终止执行的实现方法
2016/11/24 Javascript
bootstrap响应式表格实例详解
2017/05/15 Javascript
webpack3之loader全解析
2017/10/26 Javascript
Layer+Echarts构建弹出层折线图的方法
2019/09/25 Javascript
微信域名检测接口调用演示步骤(含PHP、Python)
2019/12/08 Javascript
如何利用javascript接收json信息并进行处理
2020/08/06 Javascript
VUE-ElementUI 自定义Loading图操作
2020/11/11 Javascript
Python实现身份证号码解析
2015/09/01 Python
浅析Python中的赋值和深浅拷贝
2017/08/15 Python
python opencv对图像进行旋转且不裁剪图片的实现方法
2019/07/09 Python
python实现简单银行管理系统
2019/10/25 Python
django 读取图片到页面实例
2020/03/27 Python
Python爬虫教程之利用正则表达式匹配网页内容
2020/12/08 Python
详解CSS3 filter:drop-shadow滤镜与box-shadow区别与应用
2020/08/24 HTML / CSS
澳大利亚女士时装在线:Rockmans
2018/09/26 全球购物
EJB的基本架构
2016/09/22 面试题
校园公益广告语
2014/03/13 职场文书
三月法制宣传月活动总结
2014/07/03 职场文书
软件工程毕业生自荐信
2014/07/04 职场文书
乡镇个人对照检查材料
2014/08/22 职场文书
党员干部民主生活会议批评与自我批评材料
2014/09/20 职场文书
通报表扬范文
2015/01/17 职场文书
2015年控辍保学工作总结
2015/05/18 职场文书
来探秘“德国中小企业”的成功之道
2019/07/26 职场文书