赞
踩
周期性的执行某个任务时,就需要使用计时功能。QBasicTimer跟QTimer都能实现计时功能。
QTimer可以绑定槽函数,间隔指定的时间发送一次信号,可以设置多个。
QBasicTimer使用时,需要重新timerEvent函数,QBasicTimer实例启动时需要传递两个参数,一个是触发间隔时间,另外一个触发的对象,一个程序中,出现多个QBasicTimer实例实例时,需要通过timerId()过滤发送对象。
t = QBasicTimer()t.start(1000, self)# start(self, int, QObject)
下面的实例演示的两种定时器的使用
- import sys, random
- from PyQt5.QtWidgets import QMainWindow, QFrame, QDesktopWidget, QApplication, QLabel, QHBoxLayout
- from PyQt5.QtCore import Qt, QBasicTimer, pyqtSignal, QTimer
- from PyQt5.QtGui import QPainter, QColor, QFont
-
-
- class MinWin(QMainWindow):
- def __init__(self):
- super(MinWin, self).__init__()
-
- w = QFrame()
- self.label = QLabel()
- self.label.setAlignment(Qt.AlignCenter)
- font = QFont('SimHei', 13)
- self.label.setFont(font)
-
- self.blabel = QLabel()
- self.blabel.setAlignment(Qt.AlignCenter)
- font = QFont('SimHei', 13)
- self.blabel.setFont(font)
-
- hLayout = QHBoxLayout()
- hLayout.addWidget(self.label)
- hLayout.addWidget(self.blabel)
- w.setLayout(hLayout)
- self.setCentralWidget(w)
-
- self.resize(900, 760)
-
- self.numCount = 0
- self.setContext(self.numCount)
-
- self.timer = QTimer()
- self.timer.start(1000)
- self.timer.timeout.connect(self.timerFunc)
-
- self.bTimer = QBasicTimer()
- # print(self.bTimer.timerId())
-
- self.bTimer.start(1000, self)
- self.bNumCount = 0
- self.blabel.setText(str(self.bNumCount))
-
- # 这里又实例化了一个QBasicTimer,他也会向timerEvent()发送事件
- # 在timerEvent函数中,我们使用event.timerId() == self.bTimer.timerId()进行过滤
- # 就可以达到为指定的计时器执行指定的动作
- self.b2Timer = QBasicTimer()
- # print(self.b2Timer.timerId())
- self.b2Timer.start(1000, self)
- self.b2NumCount = 0
-
- def setContext(self, comments):
- self.label.clear()
- self.label.setText(str(comments))
-
- def timerFunc(self):
- self.numCount += 1
- # self.setContext(self.numCount)
- self.label.setText(str(self.numCount))
-
- # QBasicTimer必须要重写该事件
- def timerEvent(self, event):
- if event.timerId() == self.bTimer.timerId():
- # 重写该事件
- self.bNumCount += 1
- self.blabel.setText(str(self.bNumCount))
- if event.timerId() == self.b2Timer.timerId():
- print(f'{self.b2Timer}发送信号')
-
-
- if __name__ == '__main__':
- app = QApplication([])
- tetris = MinWin()
- tetris.show()
- sys.exit(app.exec_())
-

Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。