【说明】
本文用 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_())