当前位置:   article > 正文

Python PyQt5——QTimer 定时器使用方法与代码示例_pyqt qtimer

pyqt qtimer

定时器

本文将介绍 Python PyQt5 QTimer 定时器的使用方法和示例。QTimer 定时器可以用于需要定期执行任务的应用场景,例如制作时钟、更新摄像头显示画面或倒计时计时器等。

基本使用方法与事件绑定

QTimer 的事件可以通过 QTimer.timeout.connect() 信号槽绑定到对应的处理函数上。例如,在下面的示例中,定义了一个 onTimer() 函数,每当定时器时间到达时,就会执行这个函数。

要启动 QTimer 定时器,需要调用 QTimer.start() 方法,并传入时间间隔,单位为毫秒(ms)。例如,传入 1000 表示每隔 1000 毫秒(即 1 秒)会触发一次 onTimer()。需要注意的是,定时器不仅仅是触发一次,而是持续按照设定的时间间隔触发,直到调用 QTimer.stop() 方法停止。

以下是一个完整的示例代码:

import sys
from PyQt5.QtWidgets import QApplication, QWidget, QLabel
from PyQt5.QtGui import QFont
from PyQt5.QtCore import QTimer

class MyWidget(QWidget):
    def __init__(self):
        super().__init__()
        self.initUI()

    def initUI(self):
        self.setWindowTitle('我的窗口')
        self.setGeometry(50, 50, 200, 150)
        self.mylabel = QLabel('0', self)
        self.mylabel.setFont(QFont('Arial', 24))
        self.mylabel.move(60, 50)
        self.counter = 0
        self.mytimer = QTimer(self)
        self.mytimer.timeout.connect(self.onTimer)
        self.mytimer.start(1000)

    def onTimer(self):
        self.counter += 1
        self.mylabel.setText(str(self.counter))

if __name__ == '__main__':
    app = QApplication(sys.argv)
    w = MyWidget()
    w.show()
    sys.exit(app.exec_())
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30

上面的示例运行之后,会显示一个标签控件,并在每秒更新一次显示的数字。

使用按钮事件启动定时器

使用按钮事件来启动和停止 QTimer 定时器。在这个示例中,将使用两个按钮,一个用于启动定时器,另一个用于停止定时器

为了防止用户重复点击启动按钮,在启动定时器时将其设为禁用状态,并启用停止按钮。当用户点击停止按钮时,定时器停止,两个按钮的状态也会相应切换。

以下是使用按钮控制 QTimer 定时器的示例代码:

import sys
from PyQt5.QtWidgets import QApplication, QWidget, QGridLayout, QLabel, QPushButton
from PyQt5.QtGui import QFont
from PyQt5.QtCore import QTimer

class MyWidget(QWidget):
    def __init__(self):
        super().__init__()
        self.initUI()

    def initUI(self):
        self.setWindowTitle('我的窗口')
        self.setGeometry(50, 50, 200, 150)
        self.gridlayout = QGridLayout()
        self.setLayout(self.gridlayout)
        self.mylabel = QLabel('0', self)
        self.mylabel.setFont(QFont('Arial', 24))
        self.gridlayout.addWidget(self.mylabel, 0, 0, 1, 2)
        self.mybutton1 = QPushButton('开始', self)
        self.mybutton1.clicked.connect(self.startTimer)
        self.gridlayout.addWidget(self.mybutton1, 1, 0)
        self.mybutton2 = QPushButton('停止', self)
        self.mybutton2.clicked.connect(self.stopTimer)
        self.mybutton2.setDisabled(True)
        self.gridlayout.addWidget(self.mybutton2, 1, 1)
        self.mytimer = QTimer(self)
        self.mytimer.timeout.connect(self.onTimer)

    def startTimer(self):
        self.counter = 0
        self.mylabel.setText('开始计时...')
        self.mybutton1.setDisabled(True)
        self.mybutton2.setDisabled(False)
        self.mytimer.start(1000)

    def stopTimer(self):
        self.mylabel.setText('停止计时')
        self.mybutton1.setDisabled(False)
        self.mybutton2.setDisabled(True)
        self.mytimer.stop()

    def onTimer(self):
        self.counter += 1
        self.mylabel.setText(str(self.counter))

if __name__ == '__main__':
    app = QApplication(sys.argv)
    w = MyWidget()
    w.show()
    sys.exit(app.exec_())
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48
  • 49
  • 50

在这个示例中,使用了 QGridLayout 来对 UI 组件进行布局。
在这里插入图片描述

实现倒计时计时器

除了作为常规定时器使用,QTimer 还可以实现倒计时计时器的功能。例如,可以设置一个倒计时 5 秒的计时器,在倒计时结束时停止定时器并执行特定的函数或程序逻辑。

以下是一个使用 QTimer 实现 5 秒倒计时的示例代码:

import sys
from PyQt5.QtWidgets import QApplication, QWidget, QLabel
from PyQt5.QtGui import QFont
from PyQt5.QtCore import QTimer

class MyWidget(QWidget):
    def __init__(self):
        super().__init__()
        self.initUI()

    def initUI(self):
        self.setWindowTitle('我的窗口')
        self.setGeometry(50, 50, 200, 150)
        self.counter = 5
        self.mylabel = QLabel(str(self.counter), self)
        self.mylabel.setFont(QFont('Arial', 24))
        self.mylabel.move(60, 50)
        self.mytimer = QTimer(self)
        self.mytimer.timeout.connect(self.onTimer)
        self.mytimer.start(1000)

    def onTimer(self):
        self.counter -= 1
        self.mylabel.setText(str(self.counter))
        if self.counter == 0:
            self.mytimer.stop()
            print('时间到')

if __name__ == '__main__':
    app = QApplication(sys.argv)
    w = MyWidget()
    w.show()
    sys.exit(app.exec_())
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33

运行上述代码,将看到一个标签控件显示的数字每秒递减,直到计数结束。
在这里插入图片描述

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/小小林熬夜学编程/article/detail/649533
推荐阅读
相关标签
  

闽ICP备14008679号