You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何将PyQt5独立时钟代码嵌入通用GUI实现LCD时间显示?

把数字时钟功能嵌入到你的PyQt5通用GUI中

我来帮你把独立时钟的功能整合到你的通用GUI里,其实很简单——我们不需要把整个时钟窗口硬塞进去,只需要把时钟的时间更新逻辑移植到主窗口类中,让现有的QLCDNumber控件实现时间显示就行。下面是具体的实现步骤和完整代码:

核心思路

你的独立DigitalClock类本质是继承了QLCDNumber并添加了定时器和时间更新方法,我们可以直接把这些逻辑嫁接到通用GUI已有的QLCDNumber控件上,不需要重新创建新窗口。同时遵循PyQt5的标准开发模式:把自动生成的UI布局代码和业务逻辑代码分离,避免修改Qt Designer生成的代码。

完整整合代码

from PyQt5 import QtCore, QtGui, QtWidgets
from PyQt5.QtCore import QTime, QTimer  # 导入时钟功能所需模块

class Ui_mainWindow(object):
    def setupUi(self, mainWindow):
        # 保留你原有的setupUi代码,完全不修改
        mainWindow.setObjectName("mainWindow")
        mainWindow.resize(800, 600)
        self.centralwidget = QtWidgets.QWidget(mainWindow)
        self.centralwidget.setObjectName("centralwidget")
        self.Clock = QtWidgets.QWidget(self.centralwidget)
        self.Clock.setGeometry(QtCore.QRect(60, 420, 120, 80))
        self.Clock.setObjectName("Clock")
        self.DigitalClock = QtWidgets.QLCDNumber(self.centralwidget)
        self.DigitalClock.setGeometry(QtCore.QRect(110, 190, 64, 23))
        self.DigitalClock.setDigitCount(8)
        self.DigitalClock.setObjectName("DigitalClock")
        self.pushButton = QtWidgets.QPushButton(self.centralwidget)
        self.pushButton.setGeometry(QtCore.QRect(100, 60, 75, 23))
        self.pushButton.setObjectName("pushButton")
        self.pushButton_2 = QtWidgets.QPushButton(self.centralwidget)
        self.pushButton_2.setGeometry(QtCore.QRect(100, 110, 75, 23))
        self.pushButton_2.setObjectName("pushButton_2")
        self.pushButton_3 = QtWidgets.QPushButton(self.centralwidget)
        self.pushButton_3.setGeometry(QtCore.QRect(100, 150, 75, 23))
        self.pushButton_3.setObjectName("pushButton_3")
        self.pushButton_4 = QtWidgets.QPushButton(self.centralwidget)
        self.pushButton_4.setGeometry(QtCore.QRect(230, 60, 75, 23))
        self.pushButton_4.setObjectName("pushButton_4")
        self.pushButton_5 = QtWidgets.QPushButton(self.centralwidget)
        self.pushButton_5.setGeometry(QtCore.QRect(220, 100, 75, 23))
        self.pushButton_5.setObjectName("pushButton_5")
        self.pushButton_6 = QtWidgets.QPushButton(self.centralwidget)
        self.pushButton_6.setGeometry(QtCore.QRect(230, 150, 75, 23))
        self.pushButton_6.setObjectName("pushButton_6")
        self.label = QtWidgets.QLabel(self.centralwidget)
        self.label.setGeometry(QtCore.QRect(20, 60, 47, 13))
        self.label.setObjectName("label")
        self.label_2 = QtWidgets.QLabel(self.centralwidget)
        self.label_2.setGeometry(QtCore.QRect(20, 120, 47, 13))
        self.label_2.setObjectName("label_2")
        self.label_3 = QtWidgets.QLabel(self.centralwidget)
        self.label_3.setGeometry(QtCore.QRect(20, 160, 47, 13))
        self.label_3.setObjectName("label_3")
        mainWindow.setCentralWidget(self.centralwidget)
        self.menubar = QtWidgets.QMenuBar(mainWindow)
        self.menubar.setGeometry(QtCore.QRect(0, 0, 800, 21))
        self.menubar.setObjectName("menubar")
        mainWindow.setMenuBar(self.menubar)
        self.statusbar = QtWidgets.QStatusBar(mainWindow)
        self.statusbar.setObjectName("statusbar")
        mainWindow.setStatusBar(self.statusbar)
        self.retranslateUi(mainWindow)
        QtCore.QMetaObject.connectSlotsByName(mainWindow)

    def retranslateUi(self, mainWindow):
        # 保留你原有的retranslateUi代码,完全不修改
        _translate = QtCore.QCoreApplication.translate
        mainWindow.setWindowTitle(_translate("mainWindow", "Sim Monitor"))
        self.pushButton.setText(_translate("mainWindow", "PushButton"))
        self.pushButton_2.setText(_translate("mainWindow", "PushButton"))
        self.pushButton_3.setText(_translate("mainWindow", "PushButton"))
        self.pushButton_4.setText(_translate("mainWindow", "PushButton"))
        self.pushButton_5.setText(_translate("mainWindow", "PushButton"))
        self.pushButton_6.setText(_translate("mainWindow", "PushButton"))
        self.label.setText(_translate("mainWindow", "TextLabel"))
        self.label_2.setText(_translate("mainWindow", "TextLabel"))
        self.label_3.setText(_translate("mainWindow", "TextLabel"))

# 新增主窗口逻辑类,整合UI和时钟功能
class MainWindow(QtWidgets.QMainWindow, Ui_mainWindow):
    def __init__(self, parent=None):
        super(MainWindow, self).__init__(parent)
        self.setupUi(self)  # 初始化UI布局
        self.initClock()    # 初始化时钟功能

    def initClock(self):
        # 给QLCDNumber设置和独立时钟一样的样式
        self.DigitalClock.setSegmentStyle(QtWidgets.QLCDNumber.Filled)
        # 创建定时器,每秒触发一次时间更新
        self.timer = QTimer(self)
        self.timer.timeout.connect(self.showTime)
        self.timer.start(1000)
        # 立即显示当前时间,避免启动后延迟一秒才显示
        self.showTime()

    def showTime(self):
        # 完全复用独立时钟的时间显示逻辑
        time = QTime.currentTime()
        text = time.toString('hh:mm')
        # 每秒切换冒号的显示/隐藏,模拟闪烁效果
        if (time.second() % 2) == 0:
            text = text[:2] + ' ' + text[3:]
        self.DigitalClock.display(text)

if __name__ == "__main__":
    import sys
    app = QtWidgets.QApplication(sys.argv)
    mainWindow = MainWindow()  # 实例化整合后的主窗口
    mainWindow.show()
    sys.exit(app.exec_())

关键修改说明

  • 新增了MainWindow类:这是PyQt5开发的标准做法,把UI布局(自动生成的Ui_mainWindow)和业务逻辑分开,避免破坏自动生成的代码。
  • initClock方法:给现有的self.DigitalClock控件添加定时器和样式设置,和独立时钟的初始化逻辑一致。
  • showTime方法:直接复用独立时钟的时间格式化和显示逻辑,确保效果完全相同。

运行这段代码后,你的通用GUI里的QLCDNumber就会像独立时钟一样每秒更新时间,并且冒号会每秒闪烁一次~

内容的提问来源于stack exchange,提问作者Chris

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.15 03:30:44