pyqt5中QBasicTimer跟QTimer的使用

周期性的执行某个任务时,就需要使用计时功能。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_())

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值