有时候为了体现延时效果,或者是多事件处理,需要在窗口的文本编辑框或者表格等控件中,延迟几秒或每隔几秒显示输出一段数据,又或者可以说是每隔几秒执行下一行代码!要实现这种效果,关键的两个方法就是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中有自己的定时器QTimer,但是我暂时没有想到如何用它来实现上述的效果,因此就没有使用该方法,如有更好的方法欢迎大神指点!
总结
免责声明:本站文章均来自网站采集或用户投稿,网站不提供任何软件下载或自行开发的软件! 如有用户或公司发现本站内容信息存在侵权行为,请邮件告知! 858582#qq.com
RTX 5090要首发 性能要翻倍!三星展示GDDR7显存
三星在GTC上展示了专为下一代游戏GPU设计的GDDR7内存。
首次推出的GDDR7内存模块密度为16GB,每个模块容量为2GB。其速度预设为32 Gbps(PAM3),但也可以降至28 Gbps,以提高产量和初始阶段的整体性能和成本效益。
据三星表示,GDDR7内存的能效将提高20%,同时工作电压仅为1.1V,低于标准的1.2V。通过采用更新的封装材料和优化的电路设计,使得在高速运行时的发热量降低,GDDR7的热阻比GDDR6降低了70%。
更新日志
- 群星《伤感民谣2CD》黑胶母盘直刻DTS[WAV分轨][1.9G]
- lol全球总决赛lpl一号种子是谁 S14全球总决赛lpl一号种子队伍
- lol全球总决赛哪只队伍最年轻 2024世界赛最年轻队伍排名
- lol全球总决赛lpl二号种子是谁 S14全球总决赛lpl二号种子队伍介绍
- 恩雅-雨过天晴DTS-WAV
- 王心雅《诗意琼瑶》DTS-WAV
- 阿丽娅《印象》DTS6.1-WAV
- PS官方晒《怪物猎人:荒野》公测启动页面!你准备好了吗?
- 《怪物猎人:荒野》新怪物“赫猿兽”PV公布:残暴巨兽登场!
- 童丽2024 《千愁记旧情》8月最新 限量1:1母盘直刻[WAV+CUE][1.1G]
- 陈奕迅《认了吧》[新加坡纸盒版] [WAV+CUE][1.1G]
- 群星《小夫妻 电视原声带》[320K/MP3][113.44MB]
- 孙楠.2004-燃烧【华纳】【WAV+CUE】
- 群星.2003-英皇精挑细选VOL.1【英皇娱乐】【WAV+CUE】
- 林姗.2024-寄天的记忆【豪记】【FLAC分轨】