PyQt5中使用QTimer定時刷新:當要執行可能會超過設定時間的代碼


有時候,我們需要定時對數據進行刷新,以獲取到最新的數據,然后對數據進行處理, 這時候可以采用PyQT5 中的QTimer 類。但是,有時我們並不知道這段代碼會執行多長的時間,有時候會超過我們設定的刷新的時間,如 self.timer.start(1000)是1 秒的話,或者是我們不知道代碼執行多久。這是我遇到的一個小問題,下面我們開始解決這個問題,其實也很簡單,特此記錄一下,希望能幫助到其他的朋友們。


定義QTimer 類

self.timer = QTimer(self)
self.timer.start(1000) #單位為毫秒 self.stop() 

 QTimer 類的信號

self.timer.timeout.connect(self.function)    #到達設定的時間后,執行function函數 self.timer.singleShot.connect(1000, app.quit) #設置 1 秒后界面自動關閉

 全部的代碼:

主要是在長時間的代碼函數中,前后增加:

self.timer.stop()
.........
.........
self.timer.start()

start() 切記不要加任何的參數

from PyQt5.QtWidgets import QWidget, QPushButton, QApplication, QGridLayout, QLabel from PyQt5.QtCore import QTimer import sys class WinForm(QWidget): def __init__(self, parent=None): super(WinForm, self).__init__(parent) self.setWindowTitle("QTimer demo") self.label = QLabel('測試') self.startBtn = QPushButton('開始') self.endBtn = QPushButton('結束') layout = QGridLayout(self) # 初始化一個定時器 self.timer = QTimer(self) self.timer.timeout.connect(self.myFunction) #到達設定的時間后,執行槽函數代碼 layout.addWidget(self.label, 0, 0, 1, 2) layout.addWidget(self.startBtn, 1, 0) layout.addWidget(self.endBtn, 1, 1) # 連接按鍵操作和槽函數 self.startBtn.clicked.connect(self.startTimer) self.endBtn.clicked.connect(self.endTimer) self.setLayout(layout) def startTimer(self): self.timer.start(5000) # 5000 單位是毫秒, 即 5 秒 self.label.setText('開始執行了-----') def endTimer(self): self.timer.stop() def myFunction(self): # for i in range(10): # self.label.setText(str(i) + ',') #如果執行該代碼的時間遠遠超過 5 秒的話: 使用下面的方法 self.timer.stop() for i in range(100000000): #此代碼遠遠超過 5 秒 if i % 100 == 0: print(i) self.label.setText('這是很長的代碼') self.timer.start() #此時, start 中不要加任何的時間 if __name__ == "__main__": app = QApplication(sys.argv) form = WinForm() form.show() sys.exit(app.exec_())

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM