您好,登錄后才能下訂單哦!
這篇文章給大家分享的是有關PyQt5事件處理之定時在控件上顯示信息的示例分析的內容。小編覺得挺實用的,因此分享給大家做個參考,一起跟隨小編過來看看吧。
有時候為了體現延時效果,或者是多事件處理,需要在窗口的文本編輯框或者表格等控件中,延遲幾秒或每隔幾秒顯示輸出一段數據,又或者可以說是每隔幾秒執行下一行代碼!要實現這種效果,關鍵的兩個方法就是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,但是我暫時沒有想到如何用它來實現上述的效果,因此就沒有使用該方法,如有更好的方法歡迎大神指點!
感謝各位的閱讀!關于“PyQt5事件處理之定時在控件上顯示信息的示例分析”這篇文章就分享到這里了,希望以上內容可以對大家有一定的幫助,讓大家可以學到更多知識,如果覺得文章不錯,可以把它分享出去讓更多的人看到吧!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。