pyqt中Qtimer两种常见使用场景,单次定时触发和周期性触发

2022-10-23 09:05:36

在学习pyqt时,用到了两种比较常见的QTimer的使用方法,分别是单次触发和周期性触发,下面使用一个程序给大家演示一下这两种方法。

首先使用QTdesigner设计一个简单的界面,这里选中两个Label告诉大家我放置了两个Label。.ui文件保存在项目目录中。使用pyUIC生成.py文件,写好main函数
使用QTdesigner设计一个简单的界面
使用pyUIC生成.py文件,并在文件中使用Qtimer的两种使用方法写好一个时间显示的功能,具体是:点击按键会打开/关闭时间的显示功能,在整点时会有一条持续五秒的整点提示信息。

# 导入import datetimefrom PyQt5import QtCore, QtGui, QtWidgetsfrom PyQt5.QtCoreimport QTimerclassUi_MainWindow(object):# 创建QTimer对象并绑定时间显示函数,def__init__(self):
        self.timer= QTimer()
        self.timer.timeout.connect(self.time_display)
        self.timer_switch_flag=False# 这是自动生成的defsetupUi(self, MainWindow):
        MainWindow.setObjectName("MainWindow")
        MainWindow.resize(490,177)
        self.centralwidget= QtWidgets.QWidget(MainWindow)
        self.centralwidget.setObjectName("centralwidget")
        self.pushButton= QtWidgets.QPushButton(self.centralwidget)
        self.pushButton.setGeometry(QtCore.QRect(180,10,121,41))
        self.pushButton.setObjectName("pushButton")
        font= QtGui.QFont()
        font.setPointSize(13)
        self.label= QtWidgets.QLabel(self.centralwidget)
        self.label.setGeometry(QtCore.QRect(200,60,201,31))
        self.label.setFont(font)
        self.label.setObjectName("label")
        self.label_2= QtWidgets.QLabel(self.centralwidget)
        self.label_2.setGeometry(QtCore.QRect(200,110,161,16))
        self.label_2.setObjectName("label_2")
        MainWindow.setCentralWidget(self.centralwidget)
        self.menubar= QtWidgets.QMenuBar(MainWindow)
        self.menubar.setGeometry(QtCore.QRect(0,0,490,23))
        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)# 这也是自动生成的,在函数的末尾绑定一下按键defretranslateUi(self, MainWindow):
        _translate= QtCore.QCoreApplication.translate
        MainWindow.setWindowTitle(_translate("MainWindow","MainWindow"))
        self.pushButton.setText(_translate("MainWindow","显示时间"))
        self.label.setText(_translate("MainWindow",""))
        self.label_2.setText(_translate("MainWindow",""))# 手动绑定按键
        self.pushButton.clicked.connect(self.display_switch)# 设置为周期性的计时器,点击按钮会打开关闭周期性的计时器,达到开关时间显示的效果defdisplay_switch(self):ifnot self.timer_switch_flag:
            self.timer.start(1000)
            self.timer_switch_flag=True
            self.pushButton.setText("停止显示")else:
            self.timer.stop()
            self.timer_switch_flag=False
            self.pushButton.setText("显示时间")# 时间显示函数deftime_display(self):#生成一个时间显示为"HH:MM:SS"的字符串
        time_str= datetime.datetime.now().strftime('%T')
        self.label.setText(time_str)# 分秒为00:00,代表整点if time_str[3:8]=='00:00':# 显示整点提示信息
            self.label_2.setText('现在是%s点整'% time_str[:2])# 设置一个五秒后开始的定时器,到时间会执行clear_label_2()函数,执行一次
            QTimer.singleShot(5000, self.clear_label_2)#defclear_label_2(self):
        self.label_2.setText('')

写好main函数

import Qtimer_demoimport sysfrom PyQt5.QtWidgetsimport QApplication, QMainWindowif __name__=='__main__':
    app= QApplication(sys.argv)
    MainWindow= QMainWindow()
    ui= Qtimer_demo.Ui_MainWindow()
    ui.setupUi(MainWindow)
    MainWindow.show()
    sys.exit(app.exec_())

效果还不错,大家可以自己试试,代码可以直接用,不过是分在两个文件中在这里插入图片描述
QTimer定时器比较方便地完成一些周期性的工作和单次定时执行的工作,如果把时间设置的很短的话,可以达到类似线程的效果,不过在QT界面中,最好使用QT的QThread,定时器只能定时处理。

  • 作者:生鸡蛋
  • 原文链接:https://blog.csdn.net/qq_40184945/article/details/120294658
    更新时间:2022-10-23 09:05:36