class QTimeLine#

QTimeLine 提供了控制动画的时间线。 更多...

Inheritance diagram of PySide6.QtCore.QTimeLine

摘要#

属性#

  • currentTime - 时间线的当前时间

  • direction - 当 QTimeLine 处于运行状态时,时间线的方向

  • duration - 时间线的总持续时间,单位为毫秒

  • easingCurve

  • loopCount - 时间线完成前应循环的次数

  • updateInterval - 每次QTimeLine更新其当前时间之间的时间,单位为毫秒

方法#

虚函数#

槽函数#

信号#

注意

本文档可能包含从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() ,在这种情况下,QTimeLineeasingCurve 属性将被忽略。

另请参阅

QProgressBarQProgressDialog

class State#

该枚举描述了时间线的状态。

常量

描述

QTimeLine.NotRunning

时间线未运行。这是 QTimeLine 的初始状态,且当其完成时将重新进入该状态。当前时间、帧和值将保持不变,直到调用 setCurrentTime() 或通过调用 start() 启动时间线。

QTimeLine.Paused

时间线已暂停(即,暂时挂起)。调用 setPaused (false) 将重新开始时间线活动。

QTimeLine.Running

时间线正在运行。在事件循环中,QTimeLine 将以固定时间间隔更新其当前时间,并在适当的时候发出 valueChanged()frameChanged() 信号。

另请参阅

state() stateChanged()

class Direction#

此枚举描述了在 Running 状态下时间线的方向。

常量

描述

QTimeLine.Forward

时间线的当前时间随时间递增(即,从0开始向结束/持续时间移动)。

QTimeLine.Backward

时间线的当前时间随时间递减(即,从结束/持续时间开始向0移动)。

另请参阅

setDirection()

注意

在使用 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(),则此值会被忽略。

另请参阅

valueForTime()

访问函数
属性 loopCountᅟ: int#

此属性存储了在完成前timeline应循环的次数。

循环次数为0表示timeline将无限循环。

默认情况下,此属性包含的值为1。

访问函数
属性 updateIntervalᅟ: int#

此属性存储QTimeLine在更新其当前时间之间的时间间隔(以毫秒为单位)。

更新当前时间时,如果当前值更改,QTimeLine将发出 valueChanged() 信号,如果帧更改,则发出 frameChanged() 信号。

默认情况下,间隔为40毫秒,对应每秒更新25次。

访问函数
__init__([duration=1000[, parent=None]])#
参数:
  • duration – int

  • parentQObject

用指定毫秒数的时长构造一个timeline。将 parent 传递给 QObject 构造函数。默认时长为1000毫秒。

currentFrame()#
返回类型:

int

返回与当前时间对应的帧。

currentTime()#
返回类型:

int

另请参阅

setCurrentTime()

属性 currentTime 的获取器。

currentValue()#
返回类型:

浮点数

返回与当前时间对应的值。

direction()#
返回类型:

方向

另请参阅

setDirection()

属性 direction 的获取器。

duration()#
返回类型:

int

另请参阅

setDuration()

属性 duration 的获取器。

easingCurve()#
返回类型:

QEasingCurve

另请参阅

setEasingCurve()

属性 easingCurve 的获取器。

endFrame()#
返回类型:

int

返回结束帧,即时间轴结束时的帧(即当前值为1的帧)。

finished()#

QTimeLine 完成(即达到时间轴的末尾)且不循环时,会发出此信号。

frameChanged(arg__1)#
参数:

arg__1 – 整数

QTimeLine运行 状态下定期发出此信号,但只有当前帧改变时才会。 frame 是当前帧号。

frameForTime(msec)#
参数:

msec – 整数

返回类型:

int

返回对应于时间 msec 的帧。该值使用起点和终点帧的线性插值计算,基于由 valueForTime() 返回的值。

loopCount()#
返回类型:

int

另请参阅

setLoopCount()

属性 loopCount 的getter。

resume()#

从当前时间恢复时间轴。 QTimeLine 将重新进入运行状态,并在进入事件循环后,会定期更新它的当前时间、帧和值。

start() 相比,此函数在恢复之前不会重启时间轴。

setCurrentTime(msec)#
参数:

msec – 整数

另请参阅

currentTime()

属性 currentTime 的setter。

setDirection(direction)#
参数:

directionDirection

另请参阅

direction()

属性 direction 的setter。

setDuration(duration)#
参数:

duration – int

另请参阅

duration()

属性 duration 的setter。

setEasingCurve(curve)#
参数:

curveQEasingCurve

另请参阅

easingCurve()

属性 easingCurveᅟ 的设置器。

setEndFrame(frame)#
参数:

frame – int

设置结束帧,这是时间线结束对应帧(即当前值为1的帧),设置为 frame

setFrameRange(startFrame, endFrame)#
参数:
  • startFrame – int

  • endFrame – int

设置时间线的帧计数器从 startFrame 开始,到结束的 endFrame。对于每个时间值,当您调用 QTimeLinecurrentFrame()frameForTime() 时,将通过插值找到相应的帧,使用 valueForTime() 的返回值。

当处于运行状态时,QTimeLine 还会在帧改变时发出 frameChanged() 信号。

setLoopCount(count)#
参数:

count – int

另请参阅

loopCount()

属性 loopCountᅟ 的设置器。

setPaused(paused)#
参数:

paused – bool

如果 paused 为 true,播放列表将暂停,使得 QTimeLine 进入暂停状态。除非调用 start() 或设置 paused 为 false,否则不会发出更新信号。如果 paused 为 false,播放列表将继续从上次暂停的位置继续播放。

另请参阅

state() start()

setStartFrame(frame)#
参数:

frame – int

设置开始帧,即对应于播放列表开始帧的帧(即当前值为 0 的帧),为 frame

setUpdateInterval(interval)#
参数:

interval – int

另请参阅

updateInterval()

属性 updateIntervalᅟ 的设置器。

start()#

启动播放列表。 QTimeLine 将进入运行状态,一旦进入事件循环,它将定期更新当前时间、帧和值。默认间隔为 40 毫秒(即每秒 25 次)。您可以通过调用 setUpdateInterval() 来更改更新间隔。

播放列表将从一个起始位置(正向)或结束位置(逆向)开始。如果您想在不重新启动的情况下恢复停止的播放列表,可以调用 resume() 代替。

startFrame()#
返回类型:

int

返回起始帧,即时间线开始处的帧(即当前值为0的帧)。

state()#
返回类型:

State

返回时间线的状态。

另请参阅

start() setPaused() stop()

stateChanged(newState)#
参数:

newStateState

每当 QTimeLine 的状态改变时,都会发出此信号。新状态是 newState.

stop()#

停止时间线,使 QTimeLine 进入 NotRunning 状态。

另请参阅

start()

toggleDirection()#

切换时间线的方向。如果方向是正向,则变为反向,反之亦然。

移除现有的 direction 绑定。

另请参阅

setDirection()

updateInterval()#
返回类型:

int

另请参阅

setUpdateInterval()

属性 updateInterval 的获取器。

valueChanged(x)#
参数:

x – float

QTimeLineRunning 状态下,在当前值发生变化时以固定的时间间隔发出此信号。其中 value 是当前值。该值介于 0.0 和 1.0 之间。

valueForTime(msec)#
参数:

msec – 整数

返回类型:

浮点数

返回时间 msec 对应的时间线值。根据曲线形状,返回值总是在 0 和 1 之间。如果 msec 为 0,则默认实现总是返回 0。

重新实现此函数以为您的时间线提供自定义曲线形状。