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函数中的默认参数
Mar 30 Python
Python socket网络编程TCP/IP服务器与客户端通信
Jan 05 Python
python实现xlsx文件分析详解
Jan 02 Python
python2.7到3.x迁移指南
Feb 01 Python
python3个性签名设计实现代码
Jun 19 Python
python制作简单五子棋游戏
Jun 18 Python
python自定义函数实现最大值的输出方法
Jul 09 Python
利用python Selenium实现自动登陆京东签到领金币功能
Oct 31 Python
Scrapy框架基本命令与settings.py设置
Feb 06 Python
基于Python绘制美观动态圆环图、饼图
Jun 03 Python
Python 实现PS滤镜的旋涡特效
Dec 03 Python
python 制作网站筛选工具(附源码)
Jan 21 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 SDK ―― 公众号支付代码详解
2016/09/13 PHP
读jQuery之十三 添加事件和删除事件的核心方法
2011/08/23 Javascript
js跨浏览器实现将字符串转化为xml对象的方法
2013/09/25 Javascript
Javascript中的Array数组对象详谈
2014/03/03 Javascript
js Object2String方便查看js对象内容
2014/11/24 Javascript
JS右下角广告窗口代码(可收缩、展开及关闭)
2015/09/04 Javascript
jQuery验证插件validate使用方法详解
2020/09/13 Javascript
JS实现自动阅读单词(有道单词本添加功能)
2016/11/14 Javascript
JavaScript实现事件的中断传播和行为阻止方法示例
2017/01/20 Javascript
JavaScript中的this陷阱的最全收集并整理(没有之一)
2017/02/21 Javascript
了解VUE的render函数的使用
2017/06/08 Javascript
Javascript es7中比较实用的两个方法示例
2017/07/21 Javascript
微信小程序上传图片功能(附后端代码)
2020/06/19 Javascript
详解JSON和JSONP劫持以及解决方法
2019/03/08 Javascript
解决layui动态加载复选框无法选中的问题
2019/09/20 Javascript
JavaScript提升机制Hoisting详解
2019/10/23 Javascript
JS实现简易贪吃蛇游戏
2020/08/24 Javascript
Nuxt的路由动画效果案例
2020/11/06 Javascript
Vue使用Element实现增删改查+打包的步骤
2020/11/25 Vue.js
实例探究Python以并发方式编写高性能端口扫描器的方法
2016/06/14 Python
windows 下python+numpy安装实用教程
2017/12/23 Python
Python多进程原理与用法分析
2018/08/21 Python
python 对多个csv文件分别进行处理的方法
2019/01/07 Python
Python实现的拉格朗日插值法示例
2019/01/08 Python
Django+boostrap 美化admin后台的操作
2020/03/11 Python
Python安装并操作redis实现流程详解
2020/10/13 Python
css3实现垂直下拉动画菜单示例
2014/04/22 HTML / CSS
使用phonegap操作数据库的实现方法
2017/03/31 HTML / CSS
Audible英国:有声读物,30天免费试用
2019/10/16 全球购物
中专毕业自我鉴定
2013/10/16 职场文书
护士实习鉴定范文
2013/12/22 职场文书
公积金单位接收函
2014/01/11 职场文书
信访工作者先进事迹
2014/01/17 职场文书
加多宝凉茶广告词
2014/03/18 职场文书
高中生第一学年自我鉴定
2014/09/12 职场文书
python基于tkinter实现gif录屏功能
2021/05/19 Python