- class QTimer#
-
概述#
属性#
intervalᅟ
- 毫秒超时间隔remainingTimeᅟ
- 剩余时间(毫秒)singleShotᅟ
- 该定时器是否为单次定时器timerTypeᅟ
- 控制定时器的精度
方法#
def
__init__()
def
interval()
def
isActive()
def
isSingleShot()
def
remainingTime()
def
setInterval()
定义
timerId()
定义
timerType()
槽(Slot)#
信号(Signal)#
定义
timeout()
静态函数#
定义
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()
信号。正因为如此,您必须在指定线程中启动和停止计时器;从另一线程启动计时器是不可能的。作为特殊情况,一个
QTimer
的超时时间为 0,将尽快超时,尽管零计时器与其他事件源之间的顺序是未指定的。零计时器可用于在进行某些工作的同时仍然提供响应式的用户界面。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的替代方案#
使用
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()
.另请参阅
- 访问函数
- property remainingTimeᅟ: int#
此属性保留剩余时间(以毫秒为单位)。
返回计时器剩余值,以毫秒为单位,直至超时。如果计时器不活动,返回的值将为-1。如果计时器已经逾期,返回的值将为0。
另请参阅
- 访问函数
- property singleShotᅟ: bool#
此属性保留计时器是否为单次定时器的信息。
单次定时器只会触发一次,非单次定时器每隔
interval
毫秒触发。此属性的默认值为
false
。另请参阅
- property timerTypeᅟ: Qt.TimerType#
此属性控制计时器的精度。
此属性的默认值为
Qt::CoarseTimer
。另请参阅
使用指定的
parent
构造定时器。- interval()#
- 返回类型:
int
另请参阅
属性
intervalᅟ
的获取器。- isActive()#
- 返回类型:
bool
如果计时器正在运行(挂起),则返回
true
;否则返回 false。属性
activeᅟ
的获取器。- isSingleShot()#
- 返回类型:
bool
属性
singleShotᅟ
的获取器。- remainingTime()#
- 返回类型:
int
属性
remainingTimeᅟ
的获取器。- setInterval(msec)#
- 参数:
msec – int
另请参阅
属性
intervalᅟ
的设置器。- setSingleShot(singleShot)#
- 参数:
singleShot – bool
另请参阅
属性
singleShotᅟ
的设置器。属性
timerTypeᅟ
的设置器。- 静态 singleShot(msec, timerType, receiver, member)#
这是一个重载函数。
这个静态函数在给定的时间间隔后调用槽函数。
使用这个函数非常方便,因为你不需要处理
timerEvent
或创建一个本地的QTimer
对象。receiver
是接收对象,member
是槽函数。时间间隔是msec
毫秒。参数timerType
影响计时器的精度。另请参阅
- 静态 singleShot(msec, receiver, member)
- 参数:
msec – int
receiver –
QObject
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
毫秒。另请参阅
- 静态 singleShot(msec, context, functor)
- 参数:
msec – int
context –
QObject
functor –
PyCallable
- 静态 singleShot(msec, functor)
- 参数:
msec – int
functor –
PyCallable
- start()#
此函数覆盖了 start()。
启动或重新启动定时器,其超时时间由
interval
指定。如果定时器已经运行,它将被
停止
并重新启动。如果
singleShot
为真,定时器将只激活一次。- start(msec)
- 参数:
msec – int
启动或重新启动定时器,其超时时间为
msec
毫秒。如果定时器已经运行,它将被
停止
并重新启动。如果
singleShot
为真,定时器将只激活一次。这相当于timer.setInterval(msec); timer.start();
注意
使用零定时器保持事件循环忙碌会导致麻烦,并可能导致用户界面出现高度异常的行为。
- stop()#
停止定时器。
另请参阅
- timeout()#
此信号在定时器超时时发出。
- timerId()#
- 返回类型:
int
如果计时器正在运行,则返回计时器的ID;否则返回-1。
- timerType()#
- 返回类型:
另请参阅
获取属性
timerType
的 getter。