1.简单上手
from PyQt5.Qt import *
import sys
class Window(QWidget):
def __init__(self):
super().__init__()
self.setWindowTitle("动画学习")
self.resize(500, 500)
self.setup_ui()
def setup_ui(self):
btn = QPushButton(self)
btn.resize(200, 200)
btn.setText("按钮")
btn.setStyleSheet("background-color: cyan;")
# 1.创建一个动画对象,并设置目标 属性
# animation = QPropertyAnimation(self)
# animation.setTargetObject(btn)
# animation.setPropertyName(b"pos")
animation = QPropertyAnimation(btn, b"pos", self)
# 2.设置属性值,开始,插值,结束
animation.setStartValue(QPoint(0, 0))
animation.setEndValue(QPoint(300, 300))
# 3.设置动画时长
animation.setDuration(3000)
# 4.启动动画
animation.start()
if __name__ == "__main__":
app = QApplication(sys.argv)
window = Window()
window.show()
sys.exit(app.exec_())
2.QAbstractAnimation
1.描述
所有动画共享该功能,继承此类可以自定义一些动画
2.功能作用
(1) 循环操作
# 设置动画循环次数
setLoopCount(self, loopCount: int)
loopCount() -> int
# 动画当前循环,从0开始
currentLoop() -> int
# 当前循环内的时间
currentLoopTime() -> int
(2) 动画方向
setDirection(self, direction: QAbstractAnimation.Direction)
direction(self) -> QAbstractAnimation.Direction
"""
QAbstractAnimation.Direction
QAbstractAnimation.Forward # 动画当前时间随时间增加
QAbstractAnimation.Backward # 动画当前时间随时间减少
"""
(3) 时间操作
# 单次时长
duration(self) -> int
# 动画总时长
totalDuration(self) -> int
# 当前时长
currentTime(self) -> int
(4) 动画状态
state() -> QAbstractAnimation.State
"""
QAbstractAnimation.State
QAbstractAnimation.Stopped
QAbstractAnimation.Paused
QAbstractAnimation.Running
"""
3.常用操作
start(QAbstractAnimation.DeletionPolicy)
"""
QAbstractAnimation.KeepWhenStopped # 停止动画时会删除动画
QAbstractAnimation.DeleteWhenStopped # 停止动画时不删除动画
"""
pause() # 暂停
resume() # 再次运行
stop() # 结束动画
setCurrentTime(int) # 设置当前时间
setPause(bool) # 设置是否暂停
4.常用信号
currentLoopChanged(int currentLoop)
directionChanged(QAbstractAnimation.Direction newDirection)
finished()
stateChanged(QAbstractAnimation.State newState, QAbstractAnimation.State oldState)
3.QPropertyAnimation
1.描述
用于实现某个属性从x到y的动画变化。继承自QVariantAnimation
2.功能作用
# 构建动画对象并设置目标属性
# 方式1
QPropertyAnimation(parent: Optional[QObject] = None)
setTargetObject(self, target: Optional[QObject])
setPropertyName(self, propertyName: Union[QByteArray, bytes, bytearray])
# 方式2
QPropertyAnimation(target: Optional[QObject], propertyName: Union[QByteArray, bytes, bytearray], parent: Optional[QObject] = None)
# 常用属性:geometry pos size windowOpacity
# 设置开始值和结束值
setStartValue(self, value: Any)
setEndValue(self, value: Any)
setKeyValueAt(self, step: float, value: Any)
setKeyValues(self, values: Iterable[Tuple[float, Any]])
# 设置动画时长
setDuration(self, msecs: int)
# 设置动画曲线
setEasingCurve(self, easing: Union[QEasingCurve, QEasingCurve.Type])
# 开启动画
start()
4.动画组
1.描述
将一组动画同时播放或按顺序播放
2.基类共性功能
QAnimationGroup
# 添加动画
addAnimation(self, animation: Optional[QAbstractAnimation])
insertAnimation(self, index: int, animation: Optional[QAbstractAnimation])
# 移除动画
removeAnimation(self, animation: Optional[QAbstractAnimation])
# 获取动画
animationAt(self, index: int) -> Optional[QAbstractAnimation]
# 获取并移除动画
takeAnimation(self, index: int) -> Optional[QAbstractAnimation]
# 动画个数
animationCount(self) -> int
# 清空动画
clear()
3.子类功能
(1) 并行动画(QParallelAnimationGroup)
功能参照父类,只是添加的所有动画都是同时执行
(2) 串行动画(QSequentialAnimationGroup)
功能参照父类,只是添加的所有动画都是串行顺序执行
子类特性功能
addPause(self, msecs: int) -> Optional[QPauseAnimation] # 添加动画中间的停顿
insertPause(self, index: int, msecs: int) -> Optional[QPauseAnimation]
currentAnimation(self) -> Optional[QAbstractAnimation]