PySide(PyQt)的QPropertyAnimation(属性动画)

学不完,根本学不完:(,感觉逐渐陷入了学习深渊。。。

        QPropertyAnimation 是 PySide(PyQt) 中一个用于在时间轴上平滑地改变对象属性的类。它常用于制作动画效果,比如移动、缩放或改变透明度等。

基本概念
        QPropertyAnimation 是 Qt 动画框架的一部分,它能够让你在一定的时间内渐变地改变一个对象的属性。比如,你可以用它来改变一个窗口的位置、大小,或者改变一个按钮的颜色。

主要功能
        属性动画:QPropertyAnimation 允许你定义要动画化的属性,并设置它的起始值和结束值。
        时间轴:你可以设置动画的持续时间,并决定动画的开始、结束以及加速、减速方式(比如线性、加速、减速)。
        缓动曲线:可以使用不同的缓动曲线(easing curve)来控制动画的变化方式。
        目标对象:动画可以作用于任何支持属性的 Qt 对象。


常用方法
        构造函数:

QPropertyAnimation(target, property_name)

target 是要应用动画的对象。
property_name 是要动画化的属性名称(例如 "pos" 或 "size")。

        设置动画范围: 

animation.setStartValue(start_value)
animation.setEndValue(end_value)

start_value 是动画开始时属性的值。
end_value 是动画结束时属性的值。


设置动画持续时间:

animation.setDuration(duration)

duration 是动画的持续时间,单位是毫秒。


设置缓动曲线:

​​​​​​​animation.setEasingCurve(easing_curve)

easing_curve 是缓动曲线的类型,例如 QEasingCurve.Linear, QEasingCurve.InOutQuad 等。


启动动画:

animation.start()

动画更新:
QPropertyAnimation 还支持更新动画的值,比如你可以设置动画的播放进度或者暂停、停止动画。例如:

设置动画的播放进度:

animation.setCurrentTime(1000)  # 设置动画到 1000 毫秒的位置

暂停播放

animation.pause()

 恢复播放

animation.resume()

停止播放 

animation.stop()  # 停止动画

示例代码,展示了如何使用 QPropertyAnimation 来动画化一个小部件的宽度:

from PyQt5.QtCore import QPropertyAnimation, QSize, QEasingCurve
from PyQt5.QtWidgets import QApplication, QVBoxLayout, QWidget, QLabel

app = QApplication([])

# 创建一个窗口
window = QWidget()
window.setGeometry(100, 100, 800, 300)
layout = QVBoxLayout(window)

# 创建一个标签
label = QLabel("Animate Me")
label.setStyleSheet('border:2px solid #b6b6b6;background-color:#e0e0e0;')
label.setFixedHeight(40)  # 固定按钮的高度
layout.addWidget(label)

# 创建 QPropertyAnimation 对象
animation = QPropertyAnimation(label, b"size")

# 设置动画的起始值和结束值
start_size = label.size()
end_size = QSize(300, label.height())  # 目标宽度为300,高度保持不变
animation.setStartValue(start_size)
animation.setEndValue(end_size)

# 设置动画持续时间(2000 毫秒即 2 秒)
animation.setDuration(2000)

# 设置缓动曲线为线性
animation.setEasingCurve(QEasingCurve.Linear)

# 启动动画
animation.start()

window.show()
app.exec_()

 一些其他的设置:

设置动画的目标对象和属性:

animation.setTargetObject(target)
animation.setPropertyName(property_name)


动画的进度和状态:

animation.currentTime(): 获取动画当前时间。
animation.currentValue(): 获取动画当前属性值。
animation.state(): 获取动画状态,如 QAbstractAnimation.Running 或 QAbstractAnimation.Stopped。

注意事项

  1. 属性名称:确保你动画化的属性是目标对象支持的属性。如果属性名称不正确,动画不会按预期工作。

  2. 线程安全QPropertyAnimation 通常在主线程中运行,确保不要在多个线程中同时操作同一个动画对象。

  3. 动画回调:你可以连接动画的信号(如 finished() 信号)来执行动画完成后的操作:

    animation.finished.connect(lambda: print("Animation finished!"))
    

  • 16
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

深蓝海拓

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值