【說明】
本文用 PyQt5 的QTimer類的兩種方式實現電子時鍾
【效果圖】
【知識點】
QTimer類提供了定時器信號/槽和單觸發定時器。
它在內部使用定時器事件來提供更通用的定時器。
QTimer很容易使用:創建一個QTimer,使用start()來開始並且把它的timeout()連接到適當的槽。當這段時間過去了,它將會發射timeout()信號。
【實現】
1、定時器信號/槽方式
1 class MyTimer(QWidget): 2 def __init__(self, parent = None): 3 # ...... 4 5 #新建一個QTimer對象 6 self.timer = QTimer() 7 self.timer.setInterval(1000) 8 self.timer.start() 9 10 # 信號連接到槽 11 self.timer.timeout.connect(self.onTimerOut) 12 13 # 定義槽 14 def onTimerOut(self): 15 self.lcd.display(time.strftime("%X",time.localtime()))
完整代碼:

1 import sys 2 import time 3 from PyQt5.QtCore import * 4 from PyQt5.QtGui import * 5 from PyQt5.QtWidgets import * 6 7 class MyTimer(QWidget): 8 def __init__(self, parent = None): 9 super(MyTimer, self).__init__(parent) 10 self.resize(200, 100) 11 self.setWindowTitle("QTimerDemo") 12 13 self.lcd = QLCDNumber() 14 self.lcd.setDigitCount(10) 15 self.lcd.setMode(QLCDNumber.Dec) 16 self.lcd.setSegmentStyle(QLCDNumber.Flat) 17 self.lcd.display(time.strftime("%X",time.localtime())) 18 19 layout = QVBoxLayout() 20 layout.addWidget(self.lcd) 21 self.setLayout(layout) 22 23 #新建一個QTimer對象 24 self.timer = QTimer() 25 self.timer.setInterval(1000) 26 self.timer.start() 27 28 # 信號連接到槽 29 self.timer.timeout.connect(self.onTimerOut) 30 31 # 定義槽 32 def onTimerOut(self): 33 self.lcd.display(time.strftime("%X",time.localtime())) 34 35 36 37 app = QApplication(sys.argv) 38 t = MyTimer() 39 t.show() 40 sys.exit(app.exec_())
2、定時器事件方式
1 class MyTimer(QWidget): 2 def __init__(self, parent = None): 3 # ...... 4 5 #新建一個QTimer對象 6 self.timer = QBasicTimer() # QTimer()貌似不行,不知何故? 7 self.timer.start(1000, self) 8 9 # 覆寫計時器事件處理函數timerEvent() 10 def timerEvent(self, event): 11 self.lcd.display(time.strftime("%X",time.localtime()))
完整代碼:

1 import sys 2 import time 3 from PyQt5.QtCore import * 4 from PyQt5.QtGui import * 5 from PyQt5.QtWidgets import * 6 7 class MyTimer(QWidget): 8 def __init__(self, parent = None): 9 super(MyTimer, self).__init__(parent) 10 self.resize(200, 100) 11 self.setWindowTitle("QTimerDemo") 12 13 self.lcd = QLCDNumber() 14 self.lcd.setDigitCount(10) 15 self.lcd.setMode(QLCDNumber.Dec) 16 self.lcd.setSegmentStyle(QLCDNumber.Flat) 17 self.lcd.display(time.strftime("%X",time.localtime())) 18 19 layout = QVBoxLayout() 20 layout.addWidget(self.lcd) 21 self.setLayout(layout) 22 23 #新建一個QTimer對象 24 self.timer = QBasicTimer() # QTimer()貌似不行,不知何故? 25 self.timer.start(1000, self) 26 27 # 覆寫計時器事件處理函數timerEvent() 28 def timerEvent(self, event): 29 if event.timerId() == self.timer.timerId(): 30 self.lcd.display(time.strftime("%X",time.localtime())) 31 else: 32 super(WigglyWidget, self).timerEvent(event) 33 34 35 app = QApplication(sys.argv) 36 t = MyTimer() 37 t.show() 38 sys.exit(app.exec_())