定时器QTimer|GUI应用程序设计|PyQt5

[music]1854211124[/music]

PyQt5中的定时器类是QTimer。QTimer不是一个可见的界面组件,在UI Designer的组件面板里找不到它。
QTimer主要的属性是interval,是定时中断的周期,单位是毫秒。
QTimer主要的信号是timeout(),在定时中断时发射此信号,若要在定时中断里做出响应,就需要编写与timeout()信号关联的槽函数。
示例Demo3_5演示了定时器的使用,程序运行时界面如图所示。窗体上还使用了3个QLCDNumber组件在定时器运行时显示当前时间,定时器停止后会计算从开始到停止经过的时间。

定时器QTimer|GUI应用程序设计|PyQt5插图

窗体UI文件Widget.ui在UI Designer里可视化设计,界面上组件的布局和属性设置见源文件。窗体业务逻辑类QmyWidget的完整代码如下:

import sys
from PyQt5.QtWidgets import  QApplication, QWidget
from PyQt5.QtCore import   QTime, QTimer


from ui_Widget import Ui_Widget
class QmyWidget(QWidget):
    def __init__(self, parent=None):
        super().__init__(parent)  #调用父类构造函数,创建窗体
        self.ui=Ui_Widget()       #创建UI对象
        self.ui.setupUi(self)     #构造UI


        self.timer=QTimer()       #创建定时器
        self.timer.stop()         #停止
        self.timer.setInterval(1000)    #定时周期1000ms
        self.timer.timeout.connect(self.do_timer_timeout)
        self.counter=QTime()             #创建计时器


##  =======由connectSlotsByName() 自动关联的槽函数======================
    def on_btnStart_clicked(self):     ##"开始"按钮
        self.timer.start()               #开始定时
        self.counter.start()             #开始计时
        self.ui.btnStart.setEnabled(False)
        self.ui.btnStop.setEnabled(True)
        self.ui.btnSetIntv.setEnabled(False)


    def on_btnSetIntv_clicked(self):    ##设置定时器的周期
        self.timer.setInterval(self.ui.spinBoxIntv.value())


    def on_btnStop_clicked(self):       ##"停止"按钮
        self.timer.stop()    #定时器停止
        tmMs=self.counter.elapsed()      #计时器经过的毫秒数
        ms=tmMs % 1000       #取余数,毫秒
        sec=tmMs/1000        #整秒
        timeStr="经过的时间:%d秒,%d毫秒"%(sec, ms)
        self.ui.LabElapsedTime.setText(timeStr)
        self.ui.btnStart.setEnabled(True)
        self.ui.btnStop.setEnabled(False)
        self.ui.btnSetIntv.setEnabled(True)


##  ==========自定义槽函数==================================
    def do_timer_timeout(self):       ##定时中断响应
        curTime=QTime.currentTime()    #获取当前时间
        self.ui.LCDHour.display(curTime.hour())
        self.ui.LCDMin.display(curTime.minute())
        self.ui.LCDSec.display(curTime.second())

(1)构造函数功能
在构造函数中创建了定时器对象self.timer并立刻停止。设置定时周期为1000ms,并为其timeout()信号关联了自定义槽函数do_timer_timeout()。
还创建了一个计时器对象self.counter,这是一个QTime类的实例,用于在开始与停止之间计算经过的时间。
(2)定时器开始运行
点击“开始”按钮后,定时器开始运行,计时器也开始运行。
定时器的定时周期到了之后发射timeout()信号,触发关联的自定义槽函数do_timer_timeout()执行,此槽函数的功能通过类函数QTime.currentTime()读取当前时间,然后将时、分、秒显示在三个LCD组件上。
(3)定时器停止运行
点击“停止”按钮时,定时器停止运行。计时器通过调用elapsed()函数可以获得上次执行start()之后经过的毫秒数。

版权声明:
作者:RHZ
链接:https://www.rhzhz.cn/?p=684
来源:RHZ | 用文字记录工作和学习生活
文章版权归作者所有,未经允许请勿转载。

THE END
分享
二维码
海报
定时器QTimer|GUI应用程序设计|PyQt5
[music]1854211124[/music] PyQt5中的定时器类是QTimer。QTimer不是一个可见的界面组件,在UI Designer的组件面板里找不到它。QTimer主要的属性是interva……
<<上一篇
下一篇>>