- class QTimeLine#
类
QTimeLine提供了控制动画的时间线。 更多...摘要#
属性#
currentTime- 时间线的当前时间direction- 当 QTimeLine 处于运行状态时,时间线的方向duration- 时间线的总持续时间,单位为毫秒loopCount- 时间线完成前应循环的次数updateInterval- 每次QTimeLine更新其当前时间之间的时间,单位为毫秒
方法#
def
__init__def
currentFramedef
currentTimedef
currentValuedef
direction定义
duration()定义
endFrame()定义
loopCount()定义
startFrame()定义
state()
虚函数#
槽函数#
定义
resume()定义
setPaused()定义
start()定义
stop()
信号#
定义
finished()
注意
本文档可能包含从C++自动翻译到Python的代码片段。我们始终欢迎对该代码片段的翻译做出贡献。如果您发现翻译存在问题,也可以通过在https:/bugreports.qt.io/projects/PYSIDE上创建工单来告知我们。
详细描述#
警告
本节包含了从C++自动翻译到Python的代码片段,可能存在错误。
它通常用于通过周期性地调用槽函数来动画化GUI控件。您可以通过将毫秒数传递给
QTimeLine构造函数来构建时间线。时间线的持续时间描述了动画将运行多长时间。然后您通过调用setFrameRange()来设置合适的帧范围。最后,将frameChanged()信号连接到您希望动画化的小部件中的一个合适的槽函数(例如,在 QProgressBar 中调用 setValue())。当您调用start()时,QTimeLine将进入运行状态,并且以稳定的速率定期发出frameChanged()信号,导致您连接的小部件的属性值从帧范围的低端增长到高端。您可以通过调用setUpdateInterval()来指定更新间隔。完成后,QTimeLine进入NotRunning状态,并发出finished()。示例
... progressBar = QProgressBar(self) progressBar.setRange(0, 100) # Construct a 1-second timeline with a frame range of 0 - 100 timeLine = QTimeLine(1000, self) timeLine.setFrameRange(0, 100) timeLine.frameChanged.connect(progressBar.setValue) # Clicking the push button will start the progress bar animation pushButton = QPushButton(tr("Start animation"), self) pushButton.clicked.connect(timeLine.start) ...
默认情况下,时间线只运行一次,从开始到结束。此时,您需要再次调用
start()来从头开始。要使时间线循环播放,可以调用setLoopCount(),传入时间线应运行完成前循环的次数。也可以通过调用setDirection()来改变方向,造成时间线反向运行。您也可以通过调用setPaused()在运行时暂停或恢复时间线。为了交互控制,还提供了setCurrentTime()函数,该函数可以直接设置时间线的位置。尽管该函数在NotRunning状态(例如,连接到QSlider的valueChanged()信号)时最有用,但此函数可以在任何时间调用。框架接口对于标准小控件很有用,但您可以使用
QTimeLine来控制任何类型的动画。QTimeLine的核心在于valueForTime()函数,该函数在给定的时间生成一个介于0和1之间的值。该值通常用于描述动画的步骤,其中0是动画的第一个步骤,而1是最后一个步骤。当运行时,QTimeLine会通过调用valueForTime()并发出valueChanged()来生成0和1之间的值。默认情况下,valueForTime()将应用一个插值算法来生成这些值。您可以通过调用setEasingCurve()从一组预定义的时间线算法中选择。注意,默认情况下,
QTimeLine使用InOutSine,这提供了一种逐渐增长然后稳步增长,最后又逐渐增长的价值。对于自定义时间表,您可以重写valueForTime(),在这种情况下,QTimeLine的easingCurve属性将被忽略。另请参阅
QProgressBarQProgressDialog- class State#
该枚举描述了时间线的状态。
常量
描述
QTimeLine.NotRunning
时间线未运行。这是
QTimeLine的初始状态,且当其完成时将重新进入该状态。当前时间、帧和值将保持不变,直到调用setCurrentTime()或通过调用start()启动时间线。QTimeLine.Paused
时间线已暂停(即,暂时挂起)。调用
setPaused(false) 将重新开始时间线活动。QTimeLine.Running
时间线正在运行。在事件循环中,
QTimeLine将以固定时间间隔更新其当前时间,并在适当的时候发出valueChanged()和frameChanged()信号。另请参阅
- class Direction#
此枚举描述了在
Running状态下时间线的方向。常量
描述
QTimeLine.Forward
时间线的当前时间随时间递增(即,从0开始向结束/持续时间移动)。
QTimeLine.Backward
时间线的当前时间随时间递减(即,从结束/持续时间开始向0移动)。
另请参阅
注意
在使用
from __feature__ import true_property时可以直接使用属性,或者通过访问器函数使用。- 属性 currentTime: int#
此属性保留时间线的当前时间。
当
QTimeLine处于正在运行状态时,此值会根据时间线的持续时间和方向持续更新。否则,它是指最后一次调用停止时的当前值,或者由 setCurrentTime() 设定的值。注意
您可以将其他属性绑定到 currentTime,但不建议设置到它。随着动画的进行,currentTime 会自动更新,这会取消其绑定。
默认情况下,此属性包含值为 0。
- 属性 direction: QTimeLine.Direction#
此属性在
QTimeLine处于运行状态时保留时间线的方向。该方向指示时间是从 0 移动到时间线的持续时间,还是从持续时间开始,移动到 0,这是在调用
start之后。任何对方向的绑定都不仅会被 setDirection() 移除,还会被
toggleDirection移除。默认情况下,此属性设置为
正向。- 属性 duration: int#
此属性在毫秒中保留时间线的总持续时间。
默认情况下,此值为 1000(即 1 秒),但您可以通过将持续时间传递给
QTimeLine的构造函数或通过调用 setDuration() 来更改此值。持续时间必须大于 0。注意
更改持续时间不会将当前时间重置为零或新的持续时间。您还需要调用
setCurrentTime并使用所需的值。- 访问函数
- 属性 easingCurve: QEasingCurve#
指定timeline将使用的缓动曲线。如果重写了
valueForTime(),则此值会被忽略。另请参阅
- 属性 loopCountᅟ: int#
此属性存储了在完成前timeline应循环的次数。
循环次数为0表示timeline将无限循环。
默认情况下,此属性包含的值为1。
- 属性 updateIntervalᅟ: int#
此属性存储QTimeLine在更新其当前时间之间的时间间隔(以毫秒为单位)。
更新当前时间时,如果当前值更改,QTimeLine将发出
valueChanged()信号,如果帧更改,则发出frameChanged()信号。默认情况下,间隔为40毫秒,对应每秒更新25次。
用指定毫秒数的时长构造一个timeline。将
parent传递给QObject构造函数。默认时长为1000毫秒。- currentFrame()#
- 返回类型:
int
返回与当前时间对应的帧。
- currentTime()#
- 返回类型:
int
另请参阅
属性
currentTime的获取器。- currentValue()#
- 返回类型:
浮点数
返回与当前时间对应的值。
- direction()#
- 返回类型:
另请参阅
属性
direction的获取器。- duration()#
- 返回类型:
int
另请参阅
属性
duration的获取器。- easingCurve()#
- 返回类型:
另请参阅
属性
easingCurve的获取器。- endFrame()#
- 返回类型:
int
返回结束帧,即时间轴结束时的帧(即当前值为1的帧)。
- finished()#
当
QTimeLine完成(即达到时间轴的末尾)且不循环时,会发出此信号。- frameChanged(arg__1)#
- 参数:
arg__1 – 整数
QTimeLine在运行状态下定期发出此信号,但只有当前帧改变时才会。frame是当前帧号。- frameForTime(msec)#
- 参数:
msec – 整数
- 返回类型:
int
返回对应于时间
msec的帧。该值使用起点和终点帧的线性插值计算,基于由valueForTime()返回的值。- loopCount()#
- 返回类型:
int
另请参阅
属性
loopCount的getter。- resume()#
从当前时间恢复时间轴。
QTimeLine将重新进入运行状态,并在进入事件循环后,会定期更新它的当前时间、帧和值。与
start()相比,此函数在恢复之前不会重启时间轴。- setCurrentTime(msec)#
- 参数:
msec – 整数
另请参阅
属性
currentTime的setter。属性
direction的setter。- setDuration(duration)#
- 参数:
duration – int
另请参阅
属性
duration的setter。- setEasingCurve(curve)#
- 参数:
curve –
QEasingCurve
另请参阅
属性
easingCurveᅟ的设置器。- setEndFrame(frame)#
- 参数:
frame – int
设置结束帧,这是时间线结束对应帧(即当前值为1的帧),设置为
frame。- setFrameRange(startFrame, endFrame)#
- 参数:
startFrame – int
endFrame – int
设置时间线的帧计数器从
startFrame开始,到结束的endFrame。对于每个时间值,当您调用QTimeLine或currentFrame()或frameForTime()时,将通过插值找到相应的帧,使用valueForTime()的返回值。当处于运行状态时,
QTimeLine还会在帧改变时发出frameChanged()信号。- setLoopCount(count)#
- 参数:
count – int
另请参阅
属性
loopCountᅟ的设置器。- setPaused(paused)#
- 参数:
paused – bool
如果
paused为 true,播放列表将暂停,使得QTimeLine进入暂停状态。除非调用start()或设置paused为 false,否则不会发出更新信号。如果paused为 false,播放列表将继续从上次暂停的位置继续播放。- setStartFrame(frame)#
- 参数:
frame – int
设置开始帧,即对应于播放列表开始帧的帧(即当前值为 0 的帧),为
frame。- setUpdateInterval(interval)#
- 参数:
interval – int
另请参阅
属性
updateIntervalᅟ的设置器。- start()#
启动播放列表。
QTimeLine将进入运行状态,一旦进入事件循环,它将定期更新当前时间、帧和值。默认间隔为 40 毫秒(即每秒 25 次)。您可以通过调用setUpdateInterval()来更改更新间隔。播放列表将从一个起始位置(正向)或结束位置(逆向)开始。如果您想在不重新启动的情况下恢复停止的播放列表,可以调用
resume()代替。- startFrame()#
- 返回类型:
int
返回起始帧,即时间线开始处的帧(即当前值为0的帧)。
返回时间线的状态。
另请参阅
每当
QTimeLine的状态改变时,都会发出此信号。新状态是newState.- stop()#
停止时间线,使
QTimeLine进入NotRunning状态。另请参阅
- toggleDirection()#
切换时间线的方向。如果方向是正向,则变为反向,反之亦然。
移除现有的
direction绑定。另请参阅
- updateInterval()#
- 返回类型:
int
另请参阅
属性
updateInterval的获取器。- valueChanged(x)#
- 参数:
x – float
QTimeLine在Running状态下,在当前值发生变化时以固定的时间间隔发出此信号。其中value是当前值。该值介于 0.0 和 1.0 之间。- valueForTime(msec)#
- 参数:
msec – 整数
- 返回类型:
浮点数
返回时间
msec对应的时间线值。根据曲线形状,返回值总是在 0 和 1 之间。如果msec为 0,则默认实现总是返回 0。重新实现此函数以为您的时间线提供自定义曲线形状。