Timer 是 UI 很重要的一個功能, 因為UI 常常會因為時間定期自己更新畫面, 如camera
camera 可以想像成 每幾個 ms 會產生一個圖案 (image)
所以需要每幾個 ms 去處理一次畫面
另外一個更常用的是計時器, 下面我先demo 一個簡單的記事功能, 之後會再慢慢增加功能
主要是讓大家了解 QTimer 的應用
QTimer 這個 class 其實很簡單, 當定義好QTimer 後, 每隔設定的時間會發出signal 到指定的Slot
另外我們會新使用一個PyQT的class 叫 QFont, 用來設定字型與大小
下面的 code 就是簡單的計時器
import sys
from PyQt5.QtWidgets import QApplication, QMainWindow, QLabel, QGridLayout, QWidget
from PyQt5.QtGui import QPixmap, QImage,QFont
from PyQt5.QtCore import QTimer
class window(QWidget):
def __init__(self):
super().__init__()
self.label = QLabel(self)
self.label.setText("0")
self.label.setGeometry(200,100,200,200)
self.label.setFont(QFont("Roman times",100,QFont.Bold)) #設訂字體
self.setGeometry(500,300,700,500)
self.setWindowTitle("PyQT Timer Demo")
self.timer=QTimer(self) # 呼叫 QTimer
self.timer.timeout.connect(self.run) #當時間到時會執行 run
self.timer.start(1000) #啟動 Timer .. 每隔1000ms 會觸發 run
self.total = 0 #初始 total
def run(self):
self.label.setText(str(self.total)) # 顯示 total
self.total+=1 #Total 加 1
if __name__ == '__main__':
app = QApplication(sys.argv)
ex = window()
ex.show()
sys.exit(app.exec_())
QTimer 一但 start 就會一直觸發事件, 並不是只出發一次
所以如有需要要自己 stop
QTime 的時間單位是 ms , 與python 常用的timer 不同 timer 單位是 seconds
另外 QTimer 執行的時間要很小心, 如果 Slot 槽函數需要較長的執行
時間時, QTimer 的 時間就不要設太短,
還有如果Timer 的時間設太短的話因為一直被觸發, 這時影響到其他功能的執行
good!
回覆刪除