PyQt5之动画

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]

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值