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迭代用法实例教程
Sep 08 Python
对比Python中__getattr__和 __getattribute__获取属性的用法
Jun 21 Python
python分布式环境下的限流器的示例
Oct 26 Python
python机器学习理论与实战(四)逻辑回归
Jan 19 Python
Python爬虫框架Scrapy常用命令总结
Jul 26 Python
基于python实现学生管理系统
Oct 17 Python
Python3简单实现串口通信的方法
Jun 12 Python
检测python爬虫时是否代理ip伪装成功的方法
Jul 12 Python
Pycharm中出现ImportError:DLL load failed:找不到指定模块的解决方法
Sep 17 Python
python模块导入的方法
Oct 24 Python
解决jupyter notebook 出现In[*]的问题
Apr 13 Python
python爬虫把url链接编码成gbk2312格式过程解析
Jun 08 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
Discuz 6.0+ 批量注册用户名
2009/09/13 PHP
PHP实现二维数组按照指定的字段进行排序算法示例
2019/04/23 PHP
仿迅雷焦点广告效果(JQuery版)
2008/11/19 Javascript
jQuery 拖动层(在可视区域范围内)
2012/05/24 Javascript
不用锚点也可以平滑滚动到页面的指定位置实现代码
2013/05/08 Javascript
Jquery仿IGoogle实现可拖动窗口示例代码
2014/08/22 Javascript
jQuery实现统计输入文字个数的方法
2015/03/11 Javascript
js+html5实现的自由落体运动效果代码
2016/01/28 Javascript
Bootstrap入门书籍之(五)导航条、分页导航
2016/02/17 Javascript
jQuery使用模式窗口实现在主页面和子页面中互相传值的方法
2016/03/01 Javascript
详解JS中定时器setInterval和setTImeout的this指向问题
2017/01/06 Javascript
JS中的多态实例详解
2017/10/15 Javascript
JS函数节流和函数防抖问题分析
2017/12/18 Javascript
利用vue开发一个所谓的数独方法实例
2017/12/21 Javascript
解决layui table表单提示数据接口请求异常的问题
2019/09/24 Javascript
ckeditor一键排版功能实现方法分析
2020/02/06 Javascript
解决antd 表单设置默认值initialValue后验证失效的问题
2020/11/02 Javascript
[54:24]Optic vs TNC 2018国际邀请赛小组赛BO2 第二场
2018/08/18 DOTA
python 字符串split的用法分享
2013/03/23 Python
Python单元测试框架unittest简明使用实例
2015/04/13 Python
详解Python中for循环的使用方法
2015/05/14 Python
简单介绍Python中用于求最小值的min()方法
2015/05/15 Python
django ajax json的实例代码
2018/05/29 Python
python+opencv打开摄像头,保存视频、拍照功能的实现方法
2019/01/08 Python
获取CSDN文章内容并转换为markdown文本的python
2020/09/06 Python
python中用Scrapy实现定时爬虫的实例讲解
2021/01/18 Python
CSS3解析抖音LOGO制作的方法步骤
2019/04/11 HTML / CSS
SKECHERS斯凯奇中国官网:来自美国的运动休闲品牌
2018/11/14 全球购物
应届大学生自荐信
2013/12/05 职场文书
小学教师管理制度
2014/01/18 职场文书
人力资源求职信
2014/05/25 职场文书
工作收入证明模板
2014/10/10 职场文书
2014年法制宣传日活动方案
2014/11/02 职场文书
2014年销售经理工作总结
2014/12/01 职场文书
canvas多重阴影发光效果实现
2021/04/20 Javascript
Java基础-封装和继承
2021/07/02 Java/Android