iT邦幫忙

2022 iThome 鐵人賽

DAY 26
0

QTimer 是 PyQt5 裡的處理時間的一個非常重要的方法,由於透過 PyQt5 產生視窗介面時,所有功能等同被封裝在一個「迴圈」裡,如果需要在迴圈中處理「定時執行某件事」,就需要使用 QTimer 定時器的功能,這篇教學會介紹如何在 PyQt5 視窗裡使用 QTimer 定時器,並透過定時器做出一些簡單的應用。

原文參考:QTimer 定時器

因為 Google Colab 不支援 PyQt5,所以請使用本機環境 ( 參考:使用 Python 虛擬環境 ) 或使用 Anaconda Jupyter 進行實作 ( 參考:使用 Anaconda )。

QTimer 定時器

使用 QTimer 定時器

載入 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_())

PyQt5 教學 - QTimer 定時器

按鈕控制定時器

了解 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_())

PyQt5 教學 - QTimer 定時器

更多 Python 教學

大家好,我是 OXXO,是個即將邁入中年的斜槓青年,我已經寫了超過 400 篇 Python 的教學,有興趣可以參考下方連結呦~ ^_^


上一篇
( Day 25 ) Layout 佈局 ( Form 表單 )
下一篇
( Day 27 ) QThread 多執行緒
系列文
實戰 Python x PyQt5 軟體介面設計35
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言