废话
该案例演示QTimer如何在规定时间更新部件。
定义数字时钟类
数字时钟类提供一个显示小时和分钟的部件,我们子类化QLCDNumber,并实现一个showTime()槽来更新时钟显示。
from PyQt5.QtWidgets import *
from PyQt5.QtCore import *
import sys
class DigitalClock(QLCDNumber):
def __init__(self):
super(DigitalClock, self).__init__()
实现数字时钟类
class DigitalClock(QLCDNumber):
def __init__(self):
super(DigitalClock, self).__init__()
self.setWindowTitle('Digital Clock')
self.resize(150, 60)
self.setSegmentStyle()
self.timer = QTimer(self)
self.timer.timeout.connect(self.showTime())
self.timer.start(1000)
- 在构造器内,我们先改变LCD数字外观, QLCDNumber默认为Filled风格,即黑色凸起的分段数字。
- 用start(1000)设置秒计时器来保持与当前时间同步
- 将timeout()信号与自定义showTime()槽连接,依次来显示每秒更新。
def showTime(self):
time = QTime.currentTime()
text = time.toString('hh:mm')
if time.second() % 2 == 0:
text = text[:2] + ' ' + text[3:]
self.display(text)
- 当时钟更新时showTime()被调用
- 用’hh:mm’格式将当前时间转化成字符串
- 当QTime.currentTime().second()为偶数时,字符串中的冒号替换为空格,这样会使冒号在每秒时显示和隐藏
- 最后我们调用QLCDNumber.display()来更新部件
整体代码
from PyQt5.QtWidgets import *
from PyQt5.QtCore import *
import sys
class DigitalClock(QLCDNumber):
def __init__(self):
super(DigitalClock, self).__init__()
self.setWindowTitle('Digital Clock')
self.resize(150, 60)
self.setSegmentStyle(QLCDNumber.Filled)
self.timer = QTimer(self)
self.timer.timeout.connect(self.showTime)
self.timer.start(1000)
def showTime(self):
time = QTime.currentTime()
text = time.toString('hh:mm')
if time.second() % 2 == 0:
text = text[:2] + ' ' + text[3:]
self.display(text)
app = QApplication(sys.argv)
dc = DigitalClock()
dc.show()
app.exec_()
最终效果
相关类
- QLCDNumber
- QTimer
- QTime
相关方法
- QLCDNumber
- setSegmentStyle
- display
- QTimer
- timeout
- start
- QTime
- currentTime()
- second()
- toString()