基于PyQT6从零开始做一个计时器

 更新时间:2026年04月29日 09:17:57   作者:微小冷  
QT是最流行的跨平台GUI,基于C++开发,pyQT为其python绑定,兼顾了开发效率和运行效率,这篇文章主要为大家详细介绍了如何基于PyQT6从零开始做一个计时器,感兴趣的小伙伴可以了解下

初步

QT是最流行的跨平台GUI,基于C++开发,pyQT为其python绑定,兼顾了开发效率和运行效率,是Python语言首选GUI框架,支持pip安装

pip install PyQt6

考虑到本系列的主角是PyQT,故后文中如不做特殊说明,QT一律指代PyQT。一个最简单的QT界面如下图所示

代码如下

import PyQt6.QtWidgets as qt
 
app = qt.QApplication([])
win = qt.QDialog()
win.resize(400,150)
hbox = qt.QHBoxLayout()
btn = qt.QPushButton("点我")
btn.clicked.connect(lambda: qt.QMessageBox.information(
    win, "Msg", "你点了我"))
hbox.addWidget(btn)
win.setLayout(hbox)
win.show() 

从上述代码可以看到,qt中的函数均以Q开头,然后紧接着是驼峰命名。这种命名规则可以有效避开其他Python模块,所以实际开发时,可直接导入QT组件,后面就不用写qt.xx了。

【QApplication】用于创建一个QT应用,是所有QT代码能够被执行的前提。尽管看上去什么也没做,但必须将其赋给一个变量,以确保其能够在整个GUI生命周期中保持存活。

有了QApp之后,就可以添加布局元素了,包括

  • 【QDialog】对话框,也就是我们看到的窗口,通过resize方法,可以设置窗口的尺寸;setLayout可以添加布局好的内容;show则可弹出窗口。
  • 【QHBoxLayout】水平布局管理器,通过addWidget方法,可以添加控件。
  • 【QPushButton】按钮,通过clicked.connect来绑定回调函数
  • 【QMessageBox】中提供了许多消息框,information为信息框

在实际开发时,往往将窗口写成类,并通过脚本的形式调用,示例如下

import PyQt6.QtWidgets as qt
import sys

class QT1:
    def __init__(self):
        app = qt.QApplication([])
        self.win = qt.QDialog()
        self.win.resize(400,150)
        hbox = qt.QHBoxLayout()
        btn = qt.QPushButton("点我")
        btn.clicked.connect(self.show_msg)
        hbox.addWidget(btn)
        self.win.setLayout(hbox)
        self.win.show() 
        sys.exit(app.exec())
    
    def show_msg(self):
        qt.QMessageBox.information(self.win, "信息提示", "你点击了我")


if __name__ == "__main__":
    QT1()

和交互式命令行相比,脚本运行QT程序需要在show之后,添加【app.exec()】,以阻塞程序,否则程序会闪退。

导出ui表单

QT提供了非常便捷的拖动式开发工具,只需安装pyside6即可启动。

pip install pyside6
pyside6-designer

进入设计器后,在模板栏选择Main Window,点击创建,即可进入UI拖拽界面

对于这个界面,常年使用C++的同学肯定会感到十分亲切。Ctrl+S快捷键可以保存当前项目,其格式为.ui。这个.ui文件是QT的界面表单,对于C++或者Python都是通用的。

下面设计一个计时器,即从左侧的部件盒子中,拉取一个LCD Number到界面上,用于计时;再拉取两个Push Button作为控制按钮。双击Push Button可以更改按钮上显示的文字,两个按钮分别设为开始和停止。

右侧属性栏中,可以修改部件名称,LCD数字屏保留原始的lcdNumber即可;开始和停止按钮分别设为bnStart和bnStop。

调用

QT设计器的功能仅限于画界面,在导出.ui之后,剩下的工作还是要交给Python。

刚刚我们保存的界面文件名为main.ui,下面在其同级路径下创建python脚本如下

from PyQt6 import uic
from PyQt6.QtWidgets import QApplication, QMainWindow
import sys

class MyWindow(QMainWindow):
    def __init__(self):
        super().__init__()
        uic.loadUi('main.ui', self)  # 加载UI文件

if __name__ == '__main__':
    app = QApplication(sys.argv)
    window = MyWindow()
    window.show()
    sys.exit(app.exec())

运行这个脚本,即可展现.ui中的规划成果

计时器实现

关于计时器的具体实现流程,主要就是Python的工作了,其运行结果如下

代码如下

import time
from threading import Thread

class MyWindow(QMainWindow):
    def __init__(self):
        super().__init__()
        uic.loadUi('main.ui', self)  # 加载UI文件
        self.bnStart.clicked.connect(self.bnStart_click)
        self.bnStop.clicked.connect(self.bnStop_click)

    def timer(self):
        t0 = time.time()
        while self.isRunning:
            dt = time.time() - t0
            self.lcdNumber.display(f"{dt:.3f}")
            time.sleep(0.1)

    def bnStart_click(self):
        self.isRunning = True
        self.lcdNumber.display("0")
        Thread(target = self.timer, daemon=True).start()

    def bnStop_click(self):
        if self.isRunning:
            self.isRunning = False
        else:
            self.lcdNumber.display("0")

【click】为按钮的点击动作,在QT的对象体系中,是一种信号,是【pyqtBoundSignal】类的具体实现,而非某个某种函数。

【connect】即用于将按钮的点击信号绑定到某个执行函数上。

在QT的术语中,connect绑定的执行函数叫做槽(slot),只不过在pyqt中,不知道slot这个概念也没什么问题。

到此这篇关于基于PyQT6从零开始做一个计时器的文章就介绍到这了,更多相关PyQT6计时器内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • 解决Pycharm 导入其他文件夹源码的2种方法

    解决Pycharm 导入其他文件夹源码的2种方法

    今天小编就为大家分享一篇解决Pycharm 导入其他文件夹源码的2种方法,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2020-02-02
  • Python实现轻松比较两个文件夹的多种方法

    Python实现轻松比较两个文件夹的多种方法

    在处理数据集时,我们经常会遇到两个文件夹中文件数目不一致的情况,本文我们就来使用Python比较一下两个文件夹,轻松实现找出多出的文件,有需要的可以了解下
    2025-09-09
  • ​cmd输入python打开微软应用商店的解决方法

    ​cmd输入python打开微软应用商店的解决方法

    在命令控制行中输入python想使用Python环境,却意外打开了微软自带的应用商店,十分苦恼,下面这篇文章主要给大家介绍了关于​cmd输入python打开微软应用商店的解决方法,需要的朋友可以参考下
    2024-03-03
  • Python多线程正确用法实例解析

    Python多线程正确用法实例解析

    这篇文章主要介绍了Python多线程正确用法实例解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-05-05
  • OpenCV图像的几何变换处理方法详解

    OpenCV图像的几何变换处理方法详解

    这篇文章主要给大家介绍了关于OpenCV图像的几何变换处理的相关资料,图像的几何变换是指将一幅图像映射到另一幅图像内,有缩放、翻转、仿射变换、透视、重映射等操作,需要的朋友可以参考下
    2024-03-03
  • Python内置模块Collections的使用教程详解

    Python内置模块Collections的使用教程详解

    collections 是 Python 的一个内置模块,所谓内置模块的意思是指 Python 内部封装好的模块,无需安装即可直接使用。本文将详解介绍Collections的使用方式,需要的可以参考一下
    2022-03-03
  • 在python中实现调用可执行文件.exe的3种方法

    在python中实现调用可执行文件.exe的3种方法

    今天小编就为大家分享一篇在python中实现调用可执行文件.exe的3种方法,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2019-07-07
  • Python入门之实例方法、类方法和静态方法的区别讲解

    Python入门之实例方法、类方法和静态方法的区别讲解

    这篇文章主要介绍了Python入门之实例方法、类方法和静态方法的区别讲解,实例方法是在创建了类的实例之后才能被调用的方法,类方法是在不需要创建类的实例的情况下就可以调用的方法,最后,静态方法是与类和类的实例都没有绑定关系的方法,需要的朋友可以参考下
    2023-10-10
  • python使用Openpyxl操作Excel文件的实现

    python使用Openpyxl操作Excel文件的实现

    openpyxl 是一个用于在 Python 中读取和写入 Excel 文件的优秀库,本文主要介绍了python使用Openpyxl操作Excel文件的实现,具有一定的参考价值,感兴趣的可以了解一下
    2025-04-04
  • 详解Django中类视图使用装饰器的方式

    详解Django中类视图使用装饰器的方式

    这篇文章主要介绍了详解Django中类视图使用装饰器的方式,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2018-08-08

最新评论