PyQt5事件處理之定時在控件上顯示信息的代碼
有時候為了體現(xiàn)延時效果,或者是多事件處理,需要在窗口的文本編輯框或者表格等控件中,延遲幾秒或每隔幾秒顯示輸出一段數(shù)據(jù),又或者可以說是每隔幾秒執(zhí)行下一行代碼!要實現(xiàn)這種效果,關(guān)鍵的兩個方法就是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)
# 表格屬性設(shè)置
self.tableWidget.horizontalHeader().setSectionResizeMode(QtWidgets.QHeaderView.Stretch)
# 【開始】按鈕
self.pushButton.clicked.connect(self.pushButton_Clicked)
self.retranslateUi(MainWindow)
QtCore.QMetaObject.connectSlotsByName(MainWindow)
# 設(shè)置每隔幾秒輸出數(shù)據(jù)
def pushButton_Clicked(self):
self.textEdit.setText("獲取基金數(shù)據(jù)中...")
# 刷新頁面
QApplication.processEvents()
item = [["110003", "易方達(dá)上證50", "-1.97%"], ["005918", "天弘滬深300", "-3.15%"], ["001513", "易方達(dá)信息產(chǎn)業(yè)", "-4.69%"]]
for i in range(3):
# 每隔兩秒執(zhí)行一次以下代碼,直到循環(huán)結(jié)束
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_())
其中關(guān)鍵代碼如下,需要設(shè)計一個循環(huán)才能實現(xiàn)每隔2秒執(zhí)行一次循環(huán)中的代碼,至于為何要調(diào)用兩次刷新頁面的函數(shù),是因為每調(diào)用一次QApplication.processEvents()就會刷新頁面,將之前在窗口顯示數(shù)據(jù)的代碼的效果全部顯示到窗口中,而在循環(huán)之前有一個輸出到文本框的文字需要首先顯示,所以在循環(huán)之前刷新一次頁面,否則就會和循環(huán)第一次的內(nèi)容一起出現(xiàn)!而第二次調(diào)用這個函數(shù)則是將循環(huán)中每隔2秒執(zhí)行的那幾行代碼產(chǎn)生的效果顯示出來,其中輸出文本框采用append()是為了不覆蓋之前的文字。
# 設(shè)置每隔幾秒輸出數(shù)據(jù)
def pushButton_Clicked(self):
self.textEdit.setText("獲取基金數(shù)據(jù)中...")
# 刷新頁面
QApplication.processEvents()
item = [["110003", "易方達(dá)上證50", "-1.97%"], ["005918", "天弘滬深300", "-3.15%"], ["001513", "易方達(dá)信息產(chǎn)業(yè)", "-4.69%"]]
for i in range(3):
# 每隔兩秒執(zhí)行一次以下代碼,直到循環(huán)結(jié)束
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()
運行結(jié)果如下圖所示(內(nèi)容以基金的凈值為例,以此紀(jì)念我這段艱難入坑基金的歲月,嗚嗚嗚,跌穿谷底嚕):因為不是動圖,實際顯示的效果是:點擊【開始】按鈕后,首先文本框顯示第一行文字,然后隔2秒后顯示第二三行文字,同時在表格中顯示第一行的信息,再隔2秒就是文本框第四五行文字以及表格第二行信息,以此類推,直到循環(huán)結(jié)束!

雖然PyQt5中有自己的定時器QTimer,但是我暫時沒有想到如何用它來實現(xiàn)上述的效果,因此就沒有使用該方法,如有更好的方法歡迎大神指點!
總結(jié)
到此這篇關(guān)于PyQt5事件處理之定時在控件上顯示信息的代碼的文章就介紹到這了,更多相關(guān)PyQt5事件處理內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Python?內(nèi)置模塊?argparse快速入門教程
argparse模塊是Python內(nèi)置的用于命令項選項與參數(shù)解析的模塊,argparse模塊可以讓人輕松編寫用戶友好的命令行接口,能夠幫助程序員為模型定義參數(shù),這篇文章主要介紹了快速入門Python內(nèi)置模塊argparse,需要的朋友可以參考下2023-06-06
python3 使用openpyxl將mysql數(shù)據(jù)寫入xlsx的操作
這篇文章主要介紹了python3 使用openpyxl將mysql數(shù)據(jù)寫入xlsx的操作,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2020-05-05
Python實現(xiàn)將DOC文檔轉(zhuǎn)換為PDF的方法
這篇文章主要介紹了Python實現(xiàn)將DOC文檔轉(zhuǎn)換為PDF的方法,涉及Python調(diào)用系統(tǒng)win32com組件實現(xiàn)文件格式轉(zhuǎn)換的相關(guān)技巧,需要的朋友可以參考下2015-07-07
Python編程實現(xiàn)兩個文件夾里文件的對比功能示例【包含內(nèi)容的對比】
這篇文章主要介紹了Python編程實現(xiàn)兩個文件夾里文件的對比功能,包含內(nèi)容的對比操作,涉及Python文件與目錄的遍歷、比較、運算等相關(guān)操作技巧,需要的朋友可以參考下2017-06-06

