pyqt5中动画的使用详解

 更新时间:2020年04月01日 14:53:30   作者:水痕001  
这篇文章主要介绍了pyqt5中动画的使用详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧

一、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_())

五、关于QAbstractAnimation中事件的操作

1、启动动画start()

2、暂停动画pause()

3、继续启动动画resume()

4、停止动画stop()

5、基本案例

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(8000)
    # animation2.start()

    animation_group = QParallelAnimationGroup(self)
    animation_group.addAnimation(animation1)
    animation_group.addAnimation(animation2)
    animation_group.start()

    self.btn1.clicked.connect(animation_group.pause)
    self.btn2.clicked.connect(animation_group.resume)


if __name__ == "__main__":
  app = QApplication(sys.argv)
  window = Window()
  window.show()
  sys.exit(app.exec_())

到此这篇关于pyqt5中动画的使用详解的文章就介绍到这了,更多相关pyqt5 动画内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • Python+logging输出到屏幕将log日志写入文件

    Python+logging输出到屏幕将log日志写入文件

    这篇文章主要给大家介绍了关于Python+logging输出到屏幕将log日志写入文件的相关资料,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-11-11
  • python读写配置文件操作示例

    python读写配置文件操作示例

    这篇文章主要介绍了python读写配置文件操作,结合实例形式分析了Python针对ini配置文件的读取、解析、写入等相关操作技巧,需要的朋友可以参考下
    2019-07-07
  • 详解Python中defaultdict的具体使用

    详解Python中defaultdict的具体使用

    defaultdict 是一个类似字典的容器,属于 collections 模块, 它是字典的子类, 因此它具有词典的所有功能,下面小编就来和大家详细聊聊defaultdict的具体使用吧
    2023-10-10
  • python保留格式汇总各部门excel内容的实现思路

    python保留格式汇总各部门excel内容的实现思路

    这篇文章主要介绍了python保留格式汇总各部门excel内容,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2020-06-06
  • Python实现轻松切割MP3文件

    Python实现轻松切割MP3文件

    有时我们需要将大型MP3文件切割成较小的部分以便上传或发送,所以本文为大家整理了可以轻松切割MP3文件的Python脚本,希望对大家有所帮助
    2023-06-06
  • Sanic框架配置操作分析

    Sanic框架配置操作分析

    这篇文章主要介绍了Sanic框架配置操作,简单分析了Sanic框架中常见的加载配置使用方法,并简单说明了内置配置的预定义变量与对应功能,需要的朋友可以参考下
    2018-07-07
  • Python入门篇之函数

    Python入门篇之函数

    本篇文章将介绍如何将语句组织成函数,以及参数概念以及在程序中的用途,需要的朋友可以参考下
    2014-10-10
  • Python使用MyQR制作专属动态彩色二维码功能

    Python使用MyQR制作专属动态彩色二维码功能

    MyQR是一个能够生成自定义二维码的第三方库,你可以根据需要生成普通二维码、带图片的艺术二维码,也可以生成动态二维码。这篇文章主要介绍了Python使用MyQR制作专属动态彩色二维码,需要的朋友可以参考下
    2019-06-06
  • 基于PyQt制作小红书图片抓取工具

    基于PyQt制作小红书图片抓取工具

    这篇文章主要为大家详细介绍了如何基于PyQt制作一个小红书图片抓取工具,文中的示例代码讲解详细,具有一定的借鉴价值,感兴趣的小伙伴可以跟随小编一起学习一下
    2023-11-11
  • Python有序查找算法之二分法实例分析

    Python有序查找算法之二分法实例分析

    这篇文章主要介绍了Python有序查找算法之二分法,结合实例形式分析了Python二分查找算法的原理与相关实现技巧,需要的朋友可以参考下
    2017-12-12

最新评论