属性动画QPropertyAnimation

属性动画QPropertyAnimation

改变大小、颜色或位置是动画中的常见操作,而QPropertyAnimation类可以修改控件的属性值

大小改变动画:

 1 import sys
 2 from PyQt5.QtCore import QPropertyAnimation, QSize
 3 from PyQt5.QtWidgets import QApplication, QWidget, QPushButton
 4 
 5 class Demo(QWidget):
 6     def __init__(self):
 7         super(Demo, self).__init__()
 8         self.resize(600, 600)
 9 
10         self.btn = QPushButton('Bigger', self)
11         self.btn.resize(100, 100)
12 
13         self.animation = QPropertyAnimation(self.btn, b'size')  # 实例化一个动画对象
14         #参数1  动画要操作的对象
15         #参数2  要改变的属性    注意:字节数组类型QByteArray     size大小
16         self.animation.setDuration(10000)  # 设置动画持续时间。单位毫秒
17         self.animation.setStartValue(QSize(100, 100))  # 动画开始时的大小
18         self.animation.setKeyValueAt(0.3, QSize(200, 200))
19         #参数1  30%时间点
20         #参数2  大小
21         self.animation.setKeyValueAt(0.8, QSize(300, 300))
22 
23         self.animation.setEndValue(QSize(600, 600))  # 动画结束时的大小
24         #参数必须为QVariant类型(可以把QVariant理解为Qt中常见的数据类型),该类型包括int,float,double,QColor,QLine,QLineF,QPoint,QPointF,QRect,QRectF,QSize和QSizeF等
25         self.animation.start()  # 动画开始
26 
27 if __name__ == '__main__':
28     app = QApplication(sys.argv)
29     demo = Demo()
30     demo.show()
31     sys.exit(app.exec_())

位置改变动画:

 1 import sys
 2 from PyQt5.QtCore import QPropertyAnimation, QPoint
 3 from PyQt5.QtWidgets import QApplication, QWidget, QPushButton
 4 
 5 class Demo(QWidget):
 6     def __init__(self):
 7         super(Demo, self).__init__()
 8         self.resize(600, 600)
 9 
10         self.btn = QPushButton('移动动画', self)
11         self.btn.resize(100, 100)
12 
13         self.animation = QPropertyAnimation(self.btn, b'pos')  # 实例化一个动画对象
14         #参数1  动画要操作的对象
15         #参数2  要改变的属性    注意:字节数组类型QByteArray     pos位置
16         self.animation.setDuration(10000)  # 设置动画持续时间。单位毫秒
17         self.animation.setStartValue(QPoint(0, 0))  # 动画开始时的位置
18         self.animation.setEndValue(QPoint(500, 500))  # 动画结束时的位置
19         self.animation.start()  # 动画开始
20 
21 if __name__ == '__main__':
22     app = QApplication(sys.argv)
23     demo = Demo()
24     demo.show()
25     sys.exit(app.exec_())

位置大小同时改变动画:

按钮还有个属性就是geometry,我们可以通过该属性同时改变按钮的大小和位置

 1 import sys
 2 from PyQt5.QtCore import QPropertyAnimation, QRect, QEasingCurve
 3 from PyQt5.QtWidgets import QApplication, QWidget, QPushButton
 4 
 5 
 6 class Demo(QWidget):
 7     def __init__(self):
 8         super(Demo, self).__init__()
 9         self.resize(600, 600)
10 
11         self.btn = QPushButton('Move', self)
12         self.btn.setGeometry(0, 0, 100, 100)
13 
14         self.animation = QPropertyAnimation(self.btn, b'geometry') # 实例化一个动画对象
15         # 参数1  动画要操作的对象
16         # 参数2  要改变的属性     geometry位置和大小
17         self.animation.setDuration(5000)  # 设置动画持续时间。单位毫秒
18         self.animation.setStartValue(QRect(0, 0, 100, 100))  #动画开始时的位置和大小
19         self.animation.setEndValue(QRect(300, 300, 300, 300))  #动画结束时的位置和大小
20         #self.animation.setEasingCurve(QEasingCurve.InBounce) #设置缓和曲线
21         self.animation.setLoopCount(-1)  #设置循环次数
22         #-1  无限循环
23         #0  不循环
24         #正数   循环次数
25         self.animation.start()
26 
27 if __name__ == '__main__':
28     app = QApplication(sys.argv)
29     demo = Demo()
30     demo.show()
31     sys.exit(app.exec_())

  缓和曲线

QEasingCurve.Linear    直线(默认)   

    

猜你喜欢

转载自www.cnblogs.com/liming19680104/p/10422261.html