PySide6 简易计时器程序

702 阅读1分钟

最近用 PySide6 写了一个简易的计时程序,界面用 Qt Designer 设计,界面如下:

image.png

功能如下:

  • QLCDNumber 控件作为显示部件
  • 一个 QSpinBox 作为输入控件,用来改变计时周期
  • 两个按钮,一个清除显示,一个开始/停止计时
  • 窗口为固定大小400x200

设计 ui

打开 Qt Designer 设计界面,放置控件和调整界面布局。设计好后把 ui 文件转换为 .py 文件以备后用,转换命令:

pyside6-uic.exe .\assets\ui\hello.ui -o test.py

使用 -o 指定输出文件的路径和名字。

VSCode 安装 Qt for Python 插件后会自动转换资源文件和ui文件为 .py 格式.

主文件(逻辑处理)

import sys
from PySide6 import QtWidgets
from PySide6.QtCore import Slot, QTimer, Qt
from assets.ui.hello_ui import Ui_Dialog # 导入UI


class MyDialog(QtWidgets.QDialog):
    '''

    '''
    def __init__(self):
        super().__init__()

        self.ui: Ui_Dialog = Ui_Dialog()
        
        self.ui.setupUi(self)
        
        self.ui.pBtnStart.clicked.connect(self.pBtnStartCallback)
        
        self.ui.pBtnClean.clicked.connect(self.pBtnCleanCallback)
        
        self.ui.spinBoxTime.valueChanged.connect(self.spinBoxTimeCallback)
        
        self.count: int = 0
        
        self.initTimer()
    
    def initTimer(self):
        self.mtimer = QTimer(self)
        self.mtimer.setSingleShot(False)
        self.mtimer.setInterval(1000)
        self.mtimer.setTimerType(Qt.TimerType.CoarseTimer)
        self.mtimer.timeout.connect(self.timerCallback)

    
    @Slot()
    def timerCallback(self):
        '''定时器 timeout 回调函数'''
        self.count += 1
        self.ui.lcdTest.display(self.count)
        
    @Slot()
    def pBtnStartCallback(self):
        print("Hello,World")
        
        # 判断 mtimer 定时器的状态
        if self.mtimer.isActive():
            self.ui.pBtnStart.setText("开始计时")
            self.mtimer.stop()
        else:
            self.ui.pBtnStart.setText("停止计时")
            self.mtimer.start()
    @Slot()
    def pBtnCleanCallback(self):
        self.count = 0
        self.ui.lcdTest.display(self.count)
    
    @Slot()
    def spinBoxTimeCallback(self):
        self.mtimer.setInterval(self.ui.spinBoxTime.value())
            

if __name__ == '__main__':
    
    app = QtWidgets.QApplication(sys.argv)

    window = MyDialog()
    window.show()

    sys.exit(app.exec())

运行演示:

qtticlk.gif

Gitee : 小土坡/python_examples (gitee.com)