QTimer 是 PyQt5 裡的處理時間的一個非常重要的方法,由於透過 PyQt5 產生視窗介面時,所有功能等同被封裝在一個「迴圈」裡,如果需要在迴圈中處理「定時執行某件事」,就需要使用 QTimer 定時器的功能,這篇教學會介紹如何在 PyQt5 視窗裡使用 QTimer 定時器,並透過定時器做出一些簡單的應用。
原文參考:QTimer 定時器
因為 Google Colab 不支援 PyQt5,所以請使用本機環境 ( 參考:使用 Python 虛擬環境 ) 或使用 Anaconda Jupyter 進行實作 ( 參考:使用 Anaconda )。
載入 QtCore 模組,就能開始使用 QTimer 方法,基本的操作流程如下:
- 使用
QtCore.QTimer()
加入定時器。- 使用
timeout.connect(fn)
設定定時要啟用的 function。- 使用
start(ms)
啟用定時器,設定間隔毫秒數。- 使用
stop()
停止定時器。
以下方的程式碼為例,程式執行後,畫面中會以每格 0.5 秒 ( 500 毫秒 ) 的間隔,將數字不斷往上累加。
from PyQt5 import QtWidgets, QtCore
import sys
app = QtWidgets.QApplication(sys.argv)
Form = QtWidgets.QWidget()
Form.setWindowTitle('oxxo.studio')
Form.resize(300, 200)
label = QtWidgets.QLabel(Form) # 加入 QLabel 顯示數字
label.setGeometry(20,10,100,40)
label.setStyleSheet('font-size:30px;')
a = 0
def count():
global a
a = a + 1 # 數字增加 1
label.setText(str(a)) # QLabel 顯示數字
timer = QtCore.QTimer() # 加入定時器
timer.timeout.connect(count) # 設定定時要執行的 function
timer.start(500) # 啟用定時器,設定間隔時間為 500 毫秒
Form.show()
sys.exit(app.exec_())
了解 QTimer 的用法後,就可以透過按鈕的方式控制定時器,下方的程式碼執行後,畫面中會有三顆按鈕,分別負責啟用 start、暫停 pause 和重設 reset,點擊按鈕後就可以看見累加的數字變化。
from PyQt5 import QtWidgets, QtCore
import sys
app = QtWidgets.QApplication(sys.argv)
Form = QtWidgets.QWidget()
Form.setWindowTitle('oxxo.studio')
Form.resize(300, 200)
label = QtWidgets.QLabel(Form)
label.setGeometry(20,10,100,40)
label.setStyleSheet('font-size:30px;')
label.setText('0')
a = 0
def count():
global a
a = a + 1
label.setText(str(a))
timer = QtCore.QTimer()
timer.timeout.connect(count)
def start():
timer.start(500) # 啟用定時器
def pause():
timer.stop() # 停止定時器
def reset():
global a
a = 0 # 數值歸零
label.setText('0')
timer.stop() # 停止定時器
btn_start = QtWidgets.QPushButton(Form)
btn_start.setText('開始')
btn_start.setGeometry(20,70,80,30)
btn_start.clicked.connect(start) # 點擊按鈕執行 start()
btn_pause = QtWidgets.QPushButton(Form)
btn_pause.setText('暫停')
btn_pause.setGeometry(100,70,80,30)
btn_pause.clicked.connect(pause) # 點擊按鈕執行 pause()
btn_reset = QtWidgets.QPushButton(Form)
btn_reset.setText('重設')
btn_reset.setGeometry(180,70,80,30)
btn_reset.clicked.connect(reset) # 點擊按鈕執行 reset()
Form.show()
sys.exit(app.exec_())
大家好,我是 OXXO,是個即將邁入中年的斜槓青年,我已經寫了超過 400 篇 Python 的教學,有興趣可以參考下方連結呦~ ^_^