最近用 PySide6 写了一个简易的计时程序,界面用 Qt Designer 设计,界面如下:
功能如下:
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())
运行演示:
Gitee : 小土坡/python_examples (gitee.com)