PySide6.QtCore.QTimeLine

class QTimeLine

QTimeLine 类提供了一个用于控制动画的时间线。更多

PySide6.QtCore.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的初始状态,也是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时,属性可以直接使用,否则通过访问器函数使用。

property currentTimeᅟ: int

此属性保存时间线的当前时间。

QTimeLine处于运行状态时,此值会随着时间线的持续时间和方向不断更新。否则,它是最后一次调用stop()时的当前值,或者是由setCurrentTime()设置的值。

注意

您可以将其他属性绑定到currentTime,但不建议对其进行绑定设置。随着动画的进行,currentTime会自动更新,这将取消其绑定。

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

Access functions:
property directionᅟ: QTimeLine.Direction

此属性在QTimeLine处于Running状态时,保存时间线的方向。

此方向指示时间是从0向时间轴持续时间移动,还是在调用start()后从持续时间值向0移动。

任何方向的绑定不仅会被setDirection()移除,还会被toggleDirection()移除。

默认情况下,此属性设置为 Forward

Access functions:
property durationᅟ: int

此属性保存时间轴的总持续时间,以毫秒为单位。

默认情况下,此值为1000(即1秒),但您可以通过向QTimeLine的构造函数传递持续时间,或通过调用setDuration()来更改此值。持续时间必须大于0。

注意

更改持续时间不会导致当前时间重置为零或新的持续时间。您还需要使用所需的值调用setCurrentTime()

Access functions:
property easingCurveᅟ: QEasingCurve

指定时间轴将使用的缓动曲线。如果重新实现了valueForTime(),则忽略此值。

另请参阅

valueForTime()

Access functions:
property loopCountᅟ: int

此属性保存时间轴在完成之前应循环的次数。

循环计数为0意味着时间线将永远循环。

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

Access functions:
property updateIntervalᅟ: int

此属性保存每次QTimeLine更新其当前时间之间的时间(以毫秒为单位)。

当更新当前时间时,如果当前值发生变化,QTimeLine 将发出 valueChanged(),如果帧发生变化,则发出 frameChanged()

默认情况下,间隔为40毫秒,相当于每秒25次更新。

Access functions:
__init__([duration=1000[, parent=None]])
Parameters:
  • duration – int

  • parentQObject

构建一个持续时间为duration毫秒的时间线。parent被传递给QObject的构造函数。默认持续时间为1000毫秒。

currentFrame()
Return type:

整数

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

currentTime()
Return type:

整数

另请参阅

setCurrentTime()

属性 currentTimeᅟ 的获取器。

currentValue()
Return type:

浮点数

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

direction()
Return type:

方向

另请参阅

setDirection()

属性 directionᅟ 的获取器。

duration()
Return type:

整数

另请参阅

setDuration()

属性 durationᅟ 的获取器。

easingCurve()
Return type:

QEasingCurve

另请参阅

setEasingCurve()

属性 easingCurveᅟ 的获取器。

endFrame()
Return type:

整数

返回结束帧,即对应于时间线结束的帧(即当前值为1的帧)。

finished()

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

frameChanged(frame)
Parameters:

frame – 整数

QTimeLineRunning 状态下定期发出此信号,但仅在当前帧发生变化时。frame 是当前帧的编号。

frameForTime(msec)
Parameters:

毫秒 – 整数

Return type:

整数

返回与时间msec对应的帧。该值是基于valueForTime()返回的值,通过起始帧和结束帧的线性插值计算得出的。

loopCount()
Return type:

整数

另请参阅

setLoopCount()

属性 loopCountᅟ 的获取器。

resume()

从当前时间恢复时间线。QTimeLine 将重新进入运行状态,一旦进入事件循环,它将定期更新其当前时间、帧和值。

start()不同,此函数在恢复之前不会重新启动时间线。

setCurrentTime(msec)
Parameters:

毫秒 – 整数

另请参阅

currentTime()

属性 currentTimeᅟ 的设置器。

setDirection(direction)
Parameters:

方向Direction

另请参阅

direction()

属性 directionᅟ 的设置器。

setDuration(duration)
Parameters:

duration – int

另请参阅

duration()

属性 durationᅟ 的设置器。

setEasingCurve(curve)
Parameters:

曲线QEasingCurve

另请参阅

easingCurve()

属性 easingCurveᅟ 的设置器。

setEndFrame(frame)
Parameters:

frame – 整数

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

setFrameRange(startFrame, endFrame)
Parameters:
  • startFrame – int

  • endFrame – int

将时间线的帧计数器设置为从startFrame开始,并在endFrame结束。对于每个时间值,QTimeLine会在你调用currentFrame()frameForTime()时,通过插值找到对应的帧,使用valueForTime()的返回值。

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

setLoopCount(count)
Parameters:

count – int

另请参阅

loopCount()

属性 loopCountᅟ 的设置器。

setPaused(paused)
Parameters:

暂停 – bool

如果 paused 为 true,时间线将暂停,导致 QTimeLine 进入暂停状态。在调用 start() 或 setPaused(false) 之前,不会发出任何更新信号。如果 paused 为 false,时间线将恢复并从暂停的地方继续。

另请参阅

state() start()

setStartFrame(frame)
Parameters:

frame – 整数

设置起始帧,即对应于时间线开始的帧(即当前值为0的帧),为frame

setUpdateInterval(interval)
Parameters:

interval – 整数

另请参阅

updateInterval()

属性 updateIntervalᅟ 的设置器。

start()

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

时间轴将从位置0开始,如果向后移动则从末尾开始。如果你想在不重新启动的情况下恢复一个停止的时间轴,你可以调用resume()来代替。

startFrame()
Return type:

整数

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

state()
Return type:

State

返回时间轴的状态。

另请参阅

start() setPaused() stop()

stateChanged(newState)
Parameters:

newStateState

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

stop()

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

另请参阅

start()

toggleDirection()

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

现有的direction绑定被移除。

另请参阅

setDirection()

updateInterval()
Return type:

整数

另请参阅

setUpdateInterval()

属性 updateIntervalᅟ 的获取器。

valueChanged(x)
Parameters:

x – 浮点数

QTimeLineRunning 状态下定期发出此信号,但仅在当前值发生变化时。value 是当前值。value 是一个介于 0.0 和 1.0 之间的数字

valueForTime(msec)
Parameters:

毫秒 – 整数

Return type:

浮点数

返回时间msec的时间线值。返回的值根据曲线形状而变化,始终在0和1之间。如果msec为0,默认实现总是返回0。

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