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  __getattr__与__setattr__使用方法
Sep 06 Python
Python实现多并发访问网站功能示例
Jun 19 Python
python使用pandas实现数据分割实例代码
Jan 25 Python
python3 破解 geetest(极验)的滑块验证码功能
Feb 24 Python
Python序列循环移位的3种方法推荐
Apr 09 Python
Python redis操作实例分析【连接、管道、发布和订阅等】
May 16 Python
python文字转语音的实例代码分析
Nov 12 Python
python利用JMeter测试Tornado的多线程
Jan 12 Python
tensorflow实现对张量数据的切片操作方式
Jan 19 Python
opencv python图像梯度实例详解
Feb 04 Python
python 视频下载神器(you-get)的具体使用
Jan 06 Python
解决python 输出到csv 出现多空行的情况
Mar 24 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
FCKeditor的安装(PHP)
2007/01/13 PHP
探讨Smarty中如何获取数组的长度以及smarty调用php函数的详解
2013/06/20 PHP
PHP echo,print,printf,sprintf函数之间的区别与用法详解
2013/11/27 PHP
php对二维数组进行排序的简单实例
2013/12/19 PHP
PHP在线打包下载功能示例
2016/10/15 PHP
[原创]PHP实现SQL语句格式化功能的方法
2017/07/28 PHP
php读取本地json文件的实例
2018/03/07 PHP
两种常用的javascript数组去重方法思路及代码
2013/03/26 Javascript
js 获取、清空input type="file"的值(示例代码)
2013/12/24 Javascript
再谈Jquery Ajax方法传递到action(补充)
2014/05/12 Javascript
jQuery中delegate()方法用法实例
2015/01/19 Javascript
JavaScript获取伪元素(Pseudo-Element)属性的方法技巧
2015/03/13 Javascript
jQuery调用ajax请求的常见方法汇总
2015/03/24 Javascript
JavaScript实现简单的数字倒计时
2015/05/15 Javascript
基于javascript实现单选及多选的向右和向左移动实例
2015/07/25 Javascript
浅谈javascript中new操作符的原理
2016/06/07 Javascript
javascript显示倒计时控制按钮的简单实现
2016/06/07 Javascript
js 实现数值的千分位及保存小数方法(推荐)
2016/08/01 Javascript
js文件中直接alert()中文出来的是乱码的解决方法
2016/11/01 Javascript
js从输入框读取内容,比较两个数字的大小方法
2017/03/13 Javascript
nodejs入门教程五:连接数据库的方法分析
2017/04/24 NodeJs
AngularJS集合数据遍历显示的实例
2017/12/27 Javascript
jQuery扩展方法实现Form表单与Json互相转换的实例代码
2018/09/05 jQuery
JS实现吸顶特效
2020/01/08 Javascript
JavaScript实现HTML导航栏下拉菜单
2020/11/25 Javascript
在Python中处理时间之clock()方法的使用
2015/05/22 Python
基于python list对象中嵌套元组使用sort时的排序方法
2018/04/18 Python
Django添加sitemap的方法示例
2018/08/06 Python
Django contenttypes 框架详解(小结)
2018/08/13 Python
使用Python将xmind脑图转成excel用例的实现代码(一)
2020/10/12 Python
详解CSS3弹性伸缩盒
2020/09/21 HTML / CSS
美国在线轮胎零售商:SimpleTire
2019/04/08 全球购物
报关员个人职业生涯规划书
2014/03/12 职场文书
酒店管理毕业生自荐信
2014/05/25 职场文书
《自己去吧》教学反思
2016/02/16 职场文书
Python实现为PDF去除水印的示例代码
2022/04/03 Python