pyqt5 旋转动画教程
时间: 2023-10-09 10:10:34 浏览: 155
下面是一个简单的 PyQT5 旋转动画示例,可以帮助您入门。该动画将一个圆形图标旋转 360 度,让我们先看一下代码:
```python
from PyQt5.QtCore import Qt, QPropertyAnimation, QPoint
from PyQt5.QtGui import QIcon, QPainter, QPixmap
from PyQt5.QtWidgets import QApplication, QGraphicsWidget, QGraphicsScene, QGraphicsView, QPushButton
class RotatingButton(QPushButton):
def __init__(self, icon, parent=None):
super().__init__(parent)
self.setIcon(icon)
self.setFixedSize(50, 50)
self.setMask(QPixmap(icon).mask())
self.animation = QPropertyAnimation(self, b"pos", self)
self.animation.setDuration(5000)
self.animation.setStartValue(QPoint(100, 100))
self.animation.setEndValue(QPoint(400, 400))
self.animation.setLoopCount(-1)
self.animation.start()
def paintEvent(self, event):
painter = QPainter(self)
painter.translate(self.width() / 2, self.height() / 2)
painter.rotate(self.animation.currentLoopTime() / 16.0)
painter.translate(-self.width() / 2, -self.height() / 2)
super().paintEvent(event)
if __name__ == '__main__':
app = QApplication([])
app.setApplicationName("Rotating Button")
scene = QGraphicsScene()
view = QGraphicsView(scene)
icon = QIcon("icon.png")
button = RotatingButton(icon)
scene.addItem(button)
view.show()
app.exec_()
```
首先,我们定义了一个 `RotatingButton` 类,它继承自 `QPushButton`。构造函数中,我们设置了按钮的图标、大小和遮罩。
接下来,我们创建了一个 `QPropertyAnimation` 实例,并将其与按钮的位置属性相关联。然后,我们设置了动画的持续时间、起始值、结束值和循环次数,并开始运行动画。
在 `paintEvent` 函数中,我们首先创建了一个 `QPainter` 实例,并将其平移至按钮中心。然后,我们根据当前循环时间旋转了画布,并再次平移回按钮左上角。最后,我们调用了 `super().paintEvent(event)` 来绘制按钮的图标。
最后,在 `if __name__ == '__main__':` 块中,我们创建了一个 `QGraphicsScene` 和一个 `QGraphicsView` 实例。我们使用 `RotatingButton` 类创建了一个旋转的按钮,并将其添加到场景中。最后,我们显示了视图并开始 PyQT5 应用程序的事件循环。
这就是一个简单的 PyQT5 旋转动画示例,希望能对您有所帮助!
阅读全文