溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務(wù)條款》

PyQt5事件處理之定時在控件上顯示信息的示例分析

發(fā)布時間:2021-06-26 09:23:56 來源:億速云 閱讀:231 作者:小新 欄目:開發(fā)技術(shù)

這篇文章給大家分享的是有關(guān)PyQt5事件處理之定時在控件上顯示信息的示例分析的內(nèi)容。小編覺得挺實用的,因此分享給大家做個參考,一起跟隨小編過來看看吧。

有時候為了體現(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", "易方達上證50", "-1.97%"], ["005918", "天弘滬深300", "-3.15%"], ["001513", "易方達信息產(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", "易方達上證50", "-1.97%"], ["005918", "天弘滬深300", "-3.15%"], ["001513", "易方達信息產(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)容以基金的凈值為例,以此紀念我這段艱難入坑基金的歲月,嗚嗚嗚,跌穿谷底嚕):因為不是動圖,實際顯示的效果是:點擊【開始】按鈕后,首先文本框顯示第一行文字,然后隔2秒后顯示第二三行文字,同時在表格中顯示第一行的信息,再隔2秒就是文本框第四五行文字以及表格第二行信息,以此類推,直到循環(huán)結(jié)束!

PyQt5事件處理之定時在控件上顯示信息的示例分析

雖然PyQt5中有自己的定時器QTimer,但是我暫時沒有想到如何用它來實現(xiàn)上述的效果,因此就沒有使用該方法,如有更好的方法歡迎大神指點!

感謝各位的閱讀!關(guān)于“PyQt5事件處理之定時在控件上顯示信息的示例分析”這篇文章就分享到這里了,希望以上內(nèi)容可以對大家有一定的幫助,讓大家可以學到更多知識,如果覺得文章不錯,可以把它分享出去讓更多的人看到吧!

向AI問一下細節(jié)

免責聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI