PySide6.QtCore.QTimer¶
- class QTimer¶
-
概要¶
属性¶
intervalᅟ- 超时间隔,以毫秒为单位remainingTimeᅟ- 剩余时间(以毫秒为单位)singleShotᅟ- 定时器是否为单次定时器timerTypeᅟ- 控制计时器的精度
方法¶
def
__init__()def
id()def
interval()def
isActive()def
isSingleShot()def
remainingTime()def
setInterval()def
setSingleShot()def
setTimerType()def
timerId()def
timerType()
插槽¶
信号¶
def
timeout()
静态函数¶
def
singleShot()
注意
本文档可能包含从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()信号。因此,您必须在其线程中启动和停止计时器;不可能从另一个线程启动计时器。作为一种特殊情况,超时时间为0的
QTimer将尽可能快地超时,尽管零定时器与其他事件源之间的顺序未指定。零定时器可用于在执行某些工作的同时仍然提供快速的用户界面:timer = QTimer(self) timer.timeout.connect(self.processOneThing) timer.start()
从那时起,
processOneThing()将被重复调用。它应该以快速返回的方式编写(通常在处理一个数据项后),以便 Qt 可以向用户界面传递事件,并在完成所有工作后立即停止计时器。这是在 GUI 应用程序中实现繁重工作的传统方式,但随着多线程在越来越多的平台上变得可用,我们预计零毫秒的QTimer对象将逐渐被QThread取代。准确性和计时器分辨率¶
定时器的准确性取决于底层操作系统和硬件。大多数平台支持1毫秒的分辨率,尽管在许多实际情况下,定时器的准确性不会达到这个分辨率。
准确性还取决于
timer type。对于PreciseTimer,QTimer将尝试将准确性保持在1毫秒。精确计时器也不会比预期提前超时。对于
CoarseTimer和VeryCoarseTimer类型,QTimer可能会比预期提前唤醒,在这些类型的误差范围内:CoarseTimer的误差为间隔的5%,而VeryCoarseTimer的误差为500毫秒。如果系统繁忙或无法提供所需的精度,所有计时器类型可能会比预期更晚超时。在这种情况下,即使多个超时已过期,Qt 也只会发出一次
timeout(),然后恢复原始间隔。QTimer的替代方案¶
Qt 6.8 引入了
QChronoTimer。这两个类之间的主要区别是,QChronoTimer支持更大的时间间隔范围和更高的精度(std::chrono::nanoseconds)。对于QTimer,支持的最大时间间隔是 ±24 天,而对于QChronoTimer,它是 ±292 年(在时间间隔超过std::numeric_limits时,整数溢出的可能性更小)。如果你只需要毫秒级的分辨率和 ±24 天的时间范围,你可以继续使用::max() QTimer。另一个替代方案是在你的类中重新实现
timerEvent()方法(该类必须是QObject的子类),并使用以下方法之一:使用
QBasicTimer,这是一个轻量级的包装计时器ID的值类。你可以使用QBasicTimer::start()启动计时器,并使用stop()停止它。你可以在重新实现的timerEvent()中处理事件。一种更低级别的方法是直接操作计时器ID。要启动计时器,调用
startTimer(),并存储返回的ID。要停止计时器,调用killTimer()。您可以在重新实现的timerEvent()中处理事件。这种方法通常比使用QBasicTimer更繁琐。
使用
timerEvent()的一个缺点是,一些高级功能,如单次定时器和信号,不受支持。一些操作系统限制了可以使用的计时器数量;Qt 试图绕过这些限制。
另请参阅
QBasicTimerQTimerEventtimerEvent()TimersAnalog Clock注意
当使用
from __feature__ import true_property时,属性可以直接使用,否则通过访问器函数使用。- property activeᅟ: bool¶
如果计时器正在运行,则此布尔属性为
true;否则为 false。- Access functions:
- property intervalᅟ: int¶
此属性保存超时间隔,单位为毫秒。
此属性的默认值为0。一个超时间隔为0的
QTimer将在窗口系统事件队列中的所有事件处理完毕后立即超时。设置正在运行的计时器的间隔将更改间隔,
stop()然后start()计时器,并获取一个新的id()。如果计时器没有运行,则只更改间隔。另请参阅
- Access functions:
- property remainingTimeᅟ: int¶
此属性保存剩余的毫秒数。
返回计时器剩余的毫秒数,直到超时。如果计时器未激活,返回值将为-1。如果计时器已超时,返回值将为0。
另请参阅
- Access functions:
- property singleShotᅟ: bool¶
此属性表示计时器是否为单次计时器。
单次计时器只触发一次,非单次计时器每隔
interval毫秒触发一次。此属性的默认值为
false。另请参阅
- Access functions:
- property timerTypeᅟ: Qt.TimerType¶
此属性控制计时器的准确性。
此属性的默认值为
Qt::CoarseTimer。另请参阅
- Access functions:
使用给定的
parent构造一个计时器。如果计时器正在运行,则返回表示计时器ID的
TimerId;否则返回Qt::TimerId::Invalid。另请参阅
- interval()¶
- Return type:
整数
另请参阅
属性
intervalᅟ的获取器。- isActive()¶
- Return type:
布尔
如果计时器正在运行,则返回
true;否则返回false。属性
activeᅟ的获取器。- isSingleShot()¶
- Return type:
布尔
属性
singleShotᅟ的获取器。- remainingTime()¶
- Return type:
整数
属性
remainingTimeᅟ的获取器。- setInterval(msec)¶
- Parameters:
毫秒 – 整数
另请参阅
属性
intervalᅟ的设置器。- setSingleShot(singleShot)¶
- Parameters:
singleShot – 布尔值
另请参阅
属性
singleShotᅟ的设置器。属性
timerTypeᅟ的设置器。- static singleShot(msec, functor)¶
- Parameters:
msec – int
函子 –
PyCallable
- static singleShot(msec, context, functor)
- Parameters:
msec – int
context –
QObject函子 –
PyCallable
- static singleShot(msec, receiver, member)
- Parameters:
msec – int
receiver –
QObjectmember – str
警告
本节包含从C++自动翻译到Python的代码片段,可能包含错误。
使用chrono重载。这个静态函数在给定的时间间隔后调用一个槽。
使用此函数非常方便,因为您不需要处理
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毫秒。另请参阅
- static singleShot(msec, timerType, receiver, member)
这是一个重载函数。
使用chrono重载。这个静态函数在给定的时间间隔后调用一个槽。
使用此函数非常方便,因为您不需要费心处理
timerEvent或创建本地的QTimer对象。receiver是接收对象,member是插槽。时间间隔为msec毫秒。timerType影响计时器的准确性。另请参阅
- start()¶
此函数重载了start()。
使用
interval中指定的超时时间启动或重新启动计时器。如果计时器已经在运行,它将被
停止并重新启动。这也会改变它的id()。如果
singleShot为 true,计时器将仅激活一次。- start(msec)
- Parameters:
毫秒 – 整数
以
msec毫秒的超时间隔启动或重新启动计时器。如果计时器已经在运行,它将被
停止并重新启动。这也会改变它的id()。如果
singleShot为 true,计时器将仅激活一次。这相当于:timer.setInterval(msec); timer.start();
注意
使用零计时器使事件循环保持忙碌肯定会引起问题,并导致UI行为高度不稳定。
- stop()¶
停止计时器。
另请参阅
- timeout()¶
当计时器超时时,会发出此信号。
- timerId()¶
- Return type:
整数
如果计时器正在运行,则返回计时器的ID;否则返回-1。
- timerType()¶
- Return type:
另请参阅
属性
timerTypeᅟ的获取器。