class QTimer#

QTimer类提供重复和单次定时器。更多

Inheritance diagram of PySide6.QtCore.QTimer

概述#

属性#

方法#

槽(Slot)#

信号(Signal)#

静态函数#

注意

本文档可能包含从 C++ 到 Python 自动翻译的片段。我们始终欢迎对片段翻译的贡献。如果您发现翻译有问题,也可以通过在 https:/bugreports.qt.io/projects/PYSIDE 上创建问题单的形式让我们知道

详细描述#

警告

本节包含从 C++ 转换到 Python 的片段,可能包含错误。

QTimer 类为计时器提供了高级编程接口。要使用它,创建一个 QTimer ,将其 timeout() 信号连接到适当的槽,并调用 start() 。从那时起,它将在固定的时间间隔发出 timeout() 信号。

一秒(1000 毫秒)定时器示例(来自模拟时钟示例)

timer = QTimer(self)
timer.timeout.connect(this, QOverload<>::of(&AnalogClock::update))
timer.start(1000)

从那时起,update() 槽每秒被调用一次。

您可以通过调用 setSingleShot(true)将计时器设置为一个只超时一次的计时器。您还可以使用静态函数 singleShot() 在指定的时间间隔后调用槽

QTimer::singleShot(200, self.updateCaption)

在多线程应用程序中,您可以在任何具有事件循环的线程中使用 QTimer。要从非GUI线程启动事件循环,请使用 exec()。Qt使用计时器的 thread affinity 来确定哪个线程将发出 timeout() 信号。正因为如此,您必须在指定线程中启动和停止计时器;从另一线程启动计时器是不可能的。

作为特殊情况,一个 QTimer 的超时时间为 0,将尽快超时,尽管零计时器与其他事件源之间的顺序是未指定的。零计时器可用于在进行某些工作的同时仍然提供响应式的用户界面。

timer = QTimer(self)
timer.timeout.connect(self.processOneThing)
timer.start()

从那时起,将反复调用 processOneThing()。它应该被编写成始终快速返回(通常在处理一个数据项后)的方式,以便Qt能够将事件传递给用户界面并在完成所有工作后立即停止计时器。这是在GUI应用程序中实现繁重工作传统方法,但随着多线程在越来越多平台上变得可用,我们预计零毫秒的 QTimer 对象将逐渐被 QThread 替换。

计时器的准确性与定时器分辨率的准确性#

计时器的准确度取决于底层的操作系统和硬件。大多数平台支持 1 毫秒的分辨率,尽管在许多实际情况下计时器的准确度不会等于这个分辨率。

精度还取决于 timer type。对于 PreciseTimerQTimer 将尝试将精度保持为 1 毫秒。精确计时器也永远不会比预期更早地超时。

对于 CoarseTimerVeryCoarseTimer 类型,QTimer 可能会早于预期唤醒,在那些类型的范围内:CoarseTimer 的间隔为 5%,而 VeryCoarseTimer 为 500 毫秒。

如果系统繁忙或无法提供所需的精度,所有计时器的超时时间可能大于预期。在这种情况下,即使多个超时已过期,Qt也只会触发一次timeout(),然后继续原始间隔。

QTimer的替代方案#

使用QTimer的另一种方法是调用您的对象的startTimer()并在您的类中重新实现timerEvent()事件处理器(必须是继承自QObject的)。缺点是timerEvent()不支持单次触发的计时器或信号等高级功能。

另一种替代方案是QBasicTimer。与直接使用startTimer()相比,通常更为简便。参见[计时器](../../overviews/timers.html#timers)了解三种方法的概述。

某些操作系统限制可以使用计时器的数量;Qt试图绕过这些限制。

另请参阅

QBasicTimer QTimerEvent timerEvent() 计时器 Analogy Clock

注意

当使用from __feature__ import true_property时可以直接使用属性,否则通过访问器函数使用。

propertyactive: bool#

如果计时器正在运行,此布尔属性则为true;否则为false。

访问函数
propertyinterval: int#

此属性保存超时间隔(毫秒)。

此属性的默认值为0。超时间隔为0的QTimer将在处理完窗口系统事件队列中的所有事件后立即超时。

设置活动定时器的间隔会改变其 timerId() .

另请参阅

singleShot

访问函数
property remainingTimeᅟ: int#

此属性保留剩余时间(以毫秒为单位)。

返回计时器剩余值,以毫秒为单位,直至超时。如果计时器不活动,返回的值将为-1。如果计时器已经逾期,返回的值将为0。

另请参阅

interval

访问函数
property singleShotᅟ: bool#

此属性保留计时器是否为单次定时器的信息。

单次定时器只会触发一次,非单次定时器每隔 interval 毫秒触发。

此属性的默认值为 false

另请参阅

interval singleShot()

访问函数
property timerTypeᅟ: Qt.TimerType#

此属性控制计时器的精度。

此属性的默认值为 Qt::CoarseTimer

另请参阅

TimerType

访问函数
__init__([parent=None])#
参数:

parentQObject

使用指定的 parent 构造定时器。

interval()#
返回类型:

int

另请参阅

setInterval()

属性 intervalᅟ 的获取器。

isActive()#
返回类型:

bool

如果计时器正在运行(挂起),则返回 true;否则返回 false。

属性 activeᅟ 的获取器。

isSingleShot()#
返回类型:

bool

属性 singleShotᅟ 的获取器。

remainingTime()#
返回类型:

int

属性 remainingTimeᅟ 的获取器。

setInterval(msec)#
参数:

msec – int

另请参阅

interval()

属性 intervalᅟ 的设置器。

setSingleShot(singleShot)#
参数:

singleShot – bool

另请参阅

函数 singleShot()

属性 singleShotᅟ 的设置器。

setTimerType(atype)#
参数:

atypeTimerType

另请参阅

timerType()

属性 timerTypeᅟ 的设置器。

静态 singleShot(msec, timerType, receiver, member)#
参数:

这是一个重载函数。

这个静态函数在给定的时间间隔后调用槽函数。

使用这个函数非常方便,因为你不需要处理 timerEvent 或创建一个本地的 QTimer 对象。

receiver 是接收对象,member 是槽函数。时间间隔是 msec 毫秒。参数 timerType 影响计时器的精度。

另请参阅

函数 start()

静态 singleShot(msec, receiver, member)
参数:
  • msec – int

  • receiverQObject

  • member – str

警告

本节包含从 C++ 转换到 Python 的片段,可能包含错误。

这个静态函数在给定的时间间隔后调用槽函数。

使用这个函数非常方便,因为你不需要处理 timerEvent 或创建一个本地的 QTimer 对象。

示例

from PySide6.QtWidgets import QApplication
from PySide6.QtCore import QTimer
if __name__ == "__main__":

    app = QApplication([])
    QTimer.singleShot(600000, app, QCoreApplication.quit)
    ...
    sys.exit(app.exec())

此示例程序在10分钟后(600,000毫秒)自动终止。

receiver 是接收对象,而 member 是槽。时间间隔是 msec 毫秒。

另请参阅

setSingleShot() start()

静态 singleShot(msec, context, functor)
参数:
  • msec – int

  • contextQObject

  • functorPyCallable

静态 singleShot(msec, functor)
参数:
  • msec – int

  • functorPyCallable

start()#

此函数覆盖了 start()。

启动或重新启动定时器,其超时时间由 interval 指定。

如果定时器已经运行,它将被 停止 并重新启动。

如果 singleShot 为真,定时器将只激活一次。

start(msec)
参数:

msec – int

启动或重新启动定时器,其超时时间为 msec 毫秒。

如果定时器已经运行,它将被 停止 并重新启动。

如果 singleShot 为真,定时器将只激活一次。这相当于

timer.setInterval(msec);
timer.start();

注意

使用零定时器保持事件循环忙碌会导致麻烦,并可能导致用户界面出现高度异常的行为。

stop()#

停止定时器。

另请参阅

函数 start()

timeout()#

此信号在定时器超时时发出。

另请参阅

interval start() stop()

timerId()#
返回类型:

int

如果计时器正在运行,则返回计时器的ID;否则返回-1。

timerType()#
返回类型:

TimerType

另请参阅

setTimerType()

获取属性 timerType 的 getter。