pyqt5中动画的使用

栏目: C++ · 发布时间: 5年前

内容简介:主要用于实现某个属性值从x到y的动画变化可以将一组动画, 同时播放或者按顺序播放
pyqt5中动画的使用

二、关于 QAbstractAnimation 父类的认识

  • 1、主要作用

    • 继承此类, 实现一些自定义动画
    • 所有动画共享的功能
  • 2、功能作用

    • 循环操作
      setLoopCount(count)
      currentLoop()
      currentLoopTime()
      
    • 时间操作
      duration()
      totalDuration()
      currentTime()
      
    • 动画方向
      • setDirection(QAbstractAnimation.Forward/QAbstractAnimation.Backward)
    • 动画状态 state()
      QAbstractAnimation.Stopped
      QAbstractAnimation.Paused
      QAbstractAnimation.Running
      

三、 QPropertyAnimation 属性动画的使用

主要用于实现某个属性值从x到y的动画变化

  • 1、定义动画的主要步骤

    • 创建一个动画,并设置目标、属性
    • 设置属性值的开始、插值、结束
    • 动画时长
    • 启动动画
  • 2、构造函数使用方式

    • 1. QPropertyAnimation(parent: QObject = None)
      setTargetObject(self, QObject)
      setPropertyName(self, Union[QByteArray, bytes, bytearray])
      
    • 2. QPropertyAnimation(QObject, Union[QByteArray, bytes, bytearray], parent: QObject = None)
  • 3、常见的属性

    geometry
    pos
    size
    windowOpacity
    
  • 4、设置开始值和结束值

    setStartValue(self, Any)
    setEndValue(self, Any)
    setKeyValueAt(self, float, Any)
    setKeyValues(self, object)
    
  • 5、设置动画时长

    • setDuration(int mesc)
  • 6、启动动画

    • start()
  • 7、简单案例(位置的)

    import sys
    from PyQt5.Qt import *
    
    
    class Window(QWidget):
        def __init__(self, *args, **kwargs):
            super().__init__(*args, **kwargs)
            self.setWindowTitle('动画')
            self.resize(500, 500)
            self.move(400, 200)
            self.btn = QPushButton(self)
            self.init_ui()
    
        def init_ui(self):
            self.btn.resize(100, 100)
            self.btn.move(0, 0)
            self.btn.setStyleSheet('QPushButton{border: none; background: pink;}')
    
            # 1.定义一个动画
            animation = QPropertyAnimation(self)
            animation.setTargetObject(self.btn)
            animation.setPropertyName(b'pos')
            # 使用另外一种构造函数方式创建
            # animation = QPropertyAnimation(self.btn, b'pos', self)
    
            # 2.设置属性值
            animation.setStartValue(QPoint(0, 0))
            animation.setEndValue(QPoint(400, 400))
    
            # 3.设置时长
            animation.setDuration(3000)
    
            # 4.启动动画
            animation.start()
    
    
    if __name__ == "__main__":
        app = QApplication(sys.argv)
        window = Window()
        window.show()
        sys.exit(app.exec_())
    复制代码
  • 8、使用插值的动画

    import sys
    from PyQt5.Qt import *
    
    
    class Window(QWidget):
        def __init__(self, *args, **kwargs):
            super().__init__(*args, **kwargs)
            self.setWindowTitle('使用插值')
            self.resize(500, 500)
            self.move(400, 200)
            self.btn = QPushButton(self)
            self.init_ui()
    
        def init_ui(self):
            self.btn.resize(50, 50)
            self.btn.move(0, 0)
            self.btn.setStyleSheet('QPushButton{border: none; background: pink;}')
            
            # 1.创建动画
            animation = QPropertyAnimation(self.btn, b'pos', self)
            
            # 2.定义动画插值
            animation.setKeyValueAt(0, QPoint(0, 0))
            animation.setKeyValueAt(0.25, QPoint(450, 0))
            animation.setKeyValueAt(0.5, QPoint(450, 450))
            animation.setKeyValueAt(0.75, QPoint(0, 450))
            animation.setKeyValueAt(1, QPoint(0, 0))
            # 3.动画时长
            animation.setDuration(5000)
            # 4.启动动画
            animation.start()
    
    
    if __name__ == "__main__":
        app = QApplication(sys.argv)
        window = Window()
        window.show()
        sys.exit(app.exec_())
    复制代码

四、 QAnimationGroup 动画组的使用

可以将一组动画, 同时播放或者按顺序播放

  • 1、使用的步骤

    • 根据上面的方式创建单独的动画(但不启动)
    • 定义一个动画组
    • 将之前的动画添加到动画组中
    • 启动动画组
  • 2、动画运行几种状态

    QParallelAnimationGroup
    QSequentialAnimationGroup
    
  • 3、一个动画组的案例

    import sys
    from PyQt5.Qt import *
    
    
    class Window(QWidget):
        def __init__(self, *args, **kwargs):
            super().__init__(*args, **kwargs)
            self.setWindowTitle('动画组')
            self.resize(500, 500)
            self.move(400, 200)
            self.btn1 = QPushButton(self)
            self.btn2 = QPushButton(self)
            self.init_ui()
    
        def init_ui(self):
            self.btn1.resize(50, 50)
            self.btn1.move(0, 0)
            self.btn1.setStyleSheet('QPushButton{border: none; background: pink;}')
    
            self.btn2.resize(50, 50)
            self.btn2.move(50, 50)
            self.btn2.setStyleSheet('border: none; background: cyan')
    
            # 按钮1的动画
            animation1 = QPropertyAnimation(self.btn1, b'pos', self)
            animation1.setKeyValueAt(0, QPoint(0, 0))
            animation1.setKeyValueAt(0.25, QPoint(450, 0))
            animation1.setKeyValueAt(0.5, QPoint(450, 450))
            animation1.setKeyValueAt(0.75, QPoint(0, 450))
            animation1.setKeyValueAt(1, QPoint(0, 0))
            animation1.setDuration(5000)
            # animation1.start()
    
            # 按钮2的动画
            animation2 = QPropertyAnimation(self.btn2, b'pos', self)
            animation2.setKeyValueAt(0, QPoint(50, 50))
            animation2.setKeyValueAt(0.25, QPoint(400, 50))
            animation2.setKeyValueAt(0.5, QPoint(400, 400))
            animation2.setKeyValueAt(0.75, QPoint(50, 400))
            animation2.setKeyValueAt(1, QPoint(50, 50))
            animation2.setDuration(3000)
            # animation2.start()
    
            animation_group = QSequentialAnimationGroup(self)
            animation_group.addAnimation(animation1)
            animation_group.addAnimation(animation2)
            animation_group.start()
    
    
    if __name__ == "__main__":
        app = QApplication(sys.argv)
        window = Window()
        window.show()
        sys.exit(app.exec_())
    复制代码

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持 码农网

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

风口上的汽车新商业

风口上的汽车新商业

郭桂山 / 人民邮电出版社 / 59

本书从互联网+汽车趋势解析、汽车电商困局突围策略、汽车后市场溃败求解等三个篇章详细阐述了作者的观察与思考,当然更多的还是作者在汽车电商行业的实践中得出的解决诸多问题的战略策略,作者站在行业之巅既有战略策略的解决方案,同时也有战术上的实施细则,更有实操案例解析与行业大咖访谈等不可多得的干货。当然,作者一向追崇的宗旨是,书中观点的对错不是最重要的,重在与行业同仁探讨,以书会友,希望作者的这块破砖头,能......一起来看看 《风口上的汽车新商业》 这本书的介绍吧!

JSON 在线解析
JSON 在线解析

在线 JSON 格式化工具

随机密码生成器
随机密码生成器

多种字符组合密码

HEX HSV 转换工具
HEX HSV 转换工具

HEX HSV 互换工具