在学习pyqt时,用到了两种比较常见的QTimer的使用方法,分别是单次触发和周期性触发,下面使用一个程序给大家演示一下这两种方法。
首先使用QTdesigner设计一个简单的界面,这里选中两个Label告诉大家我放置了两个Label。.ui文件保存在项目目录中。使用pyUIC生成.py文件,写好main函数
使用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,定时器只能定时处理。