动画框架

说明

Animation是一个基于原生的动画基础上封装的一套简单易用型框架,可以对普通的控件添加动画,
也可以对控件的QSS属性添加动画,还能给画师所绘制的图形添加动画.

导入方式

from PyQtGuiLib.animation import Animation

一个简单列子来演示

from PyQtGuiLib.header import (
    QApplication,
    PYQT_VERSIONS,
    sys,
    QWidget,
    QPushButton,
    QRect,
    QPoint
)

# 动画框架
from PyQtGuiLib.animation import Animation

class Test(QWidget):
    def __init__(self,*args,**kwargs):
        super().__init__(*args,**kwargs)
        self.resize(600,600)
        '''
             Animation 动画框架 案例一,移动一个按钮
        '''

        self.btn = QPushButton("按钮",self)
        self.btn.move(50,50)
        self.btn.resize(100,60)

        # 实例化动画类
        self.ani = Animation(self)
        # 设置动画时长
        self.ani.setDuration(2000) # 2秒

        # 对按钮添加移动动画
        '''
            addAni() 这个方法是一个非常常用的函数,用于添加一个动画
            参数是一个json格式,
            这里使用的参数含义
            targetObj:表示动画的作用对象
            propertyName: 动画的动作
            sv:起始值
            ev:结束值
        '''
        self.ani.addAni({
            "targetObj": self.btn,
            "propertyName": b"pos", # pos动作 是表示移动
            "sv": self.btn.pos(),
            "ev": QPoint(300,100)
        })
        # 开始动画
        self.ani.start()


if __name__ == '__main__':
    app = QApplication(sys.argv)

    win = Test()
    win.show()

    if PYQT_VERSIONS in ["PyQt6","PySide6"]:
        sys.exit(app.exec())
    else:
        sys.exit(app.exec_())

从这个例子不难看出addAni()这个方法是用来添加与动画相关的参数的,targetObj这个参数表示需要添加动画的对象,propertyName表示动画具体要执行的动作,sv和ev则表示动画的起始值和结束值,不同的动作,这里的值则不同.

目前所支持的参数

targetObj: 需要添加的动画对象,一般情况下这个参数都是必填项,只有有绘图时,不需要这个参数
    
propertyName:btype 动画的执行动作,必填项
    -- 普通控件常用的动作 geometry,size,pos,windowOpacity
    --- 支持绝大部分QSS属性动作,例如(background-color,color,...)
    --- value 这个动作比较特殊,一般只有在绘图动画才会使用
    
duration:int 动画执行的时间,可选参数(默认1000,就是1秒)
special: 动画的曲线参数,可选参数,内置了4种曲线(InCurve, OutBounce, CosineCurve, SineCurve) 
loop:int 动画循环次数,可选参数(默认1次)
    
call:fun 回调函数参数,可以在动画执行完成,调用一次,回调函数必须有一个参数 可选参数
argc:tuple 回调函数的参数 可选参数
  
sv: 动画的起始值,在大多数情况下可以写成"this"来指向自己当
atv:[()] 或者 [] 动画的插值  可选参数
ev: 动画的结束值
    
selector:str 选择器参数,在对QSS属性添加动画时,这个参数是必须的,其他情况可不写
qss-suffix:"px" qss属性单位 如果: 写宽度时单位是px,表示文字大小时,有时候会用到pt,ex  可选参数
        
comment:str  备注信息  可选参数

blendFlag:True/False 混合动画标志,表示在混合模式下这类动作是串行的  可选参数
    
# -------------------
注意 sv,atv,ev 中的值的参数类型必须一致
普通控件动画最简化版
{
    "targetObj":xx,
    "propertyName":"",
    "sv":xx,
    "ev":xx
}
QSS属性动画的最简化版
{
    "targetObj":xx,
    "propertyName":"",
    "sv":xx,
    "ev":xx,
    "selector":xx
}
绘图动画最简化版
{
    "propertyName":"",
    "sv":xx,
    "ev":xx
}

常用添加动画的函数

addAni(ani_data:dict)

  • 功能: 添加一个动画

  • ani_data: 动画的相关参数字典

addAnis(*argc)

  • 功能: 添加多个addAni()动画

  • argc: 多个动画的相关参数字典

addSeriesAni(ani_data: dict, variation: list)

  • 功能: 添加连续动画

  • ani_data: 动画相关参数

  • variation: 包含连续ev这个连续变化参数

  • 例子演示
    ani_data={
    "targetObj": xxx,
    "propertyName":b"pos",
    "sv":QPoint(0,0),
    "ev":QPoint(50,50)
    }
    variation = [QPoint(80,80),QPoint(100,100),QPoint(0,0)]
    
    类似这样的参数,值得注意的是variation中的每一个参数值,都必须和"ev"值的类型一致
    

addValuesAni(ani_data: dict, startObj: AniStartType, ends: AniEndType)

  • 功能: 添加一个绘图动画

  • ani_data: 动画的相关参数字典

  • startObj: 特殊的对象类型,具体的说明请看后面的介绍

  • ends:特殊的对象类型,具体的说明请看后面的介绍

addBlend(ani_datas: list)

  • 功能: 添加多个动画,来组成混合模式动画

  • ani_datas: 多个动画参数字典,如果参数中有"blendFlag"=True,则视为串行动画(默认并行动画),后面在具体介绍

start()

  • 功能: 运行动画

state()

  • 功能: 动画当前状态

pause()

  • 功能: 暂停动画

resume()

  • 功能: 恢复动画

getAni(index:int)

  • 功能: 获取所有已经添加的动画

  • 返回值类型: List[PropertyAnimation]

getCommentAni(comment:str)

  • 功能: 根据备注信息获取动画

  • 返回值类型: List[PropertyAnimation]

updateAni(ani:PropertyAnimation,new_datas:dict)

  • 功能: 更新单个动画的信息

  • new_datas: 新的动画参数,参数只需要写,你想更新的部分,对原有的其他参数不会有影响

removeAni(index:int)

  • 功能: 移除一个动画

  • index:索引/下标