PyQt5 - QWidgets部件进阶教程之数字时钟

时间:2021-09-22 23:01:16

废话

该案例演示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_()

最终效果

PyQt5 - QWidgets部件进阶教程之数字时钟

相关类

  • QLCDNumber
  • QTimer
  • QTime

相关方法

  • QLCDNumber
    • setSegmentStyle
    • display
  • QTimer
    • timeout
    • start
  • QTime
    • currentTime()
    • second()
    • toString()