QLabel 旋转动画
时间: 2024-01-11 14:03:50 浏览: 106
要在 QLabel 上应用旋转动画,可以使用 QPropertyAnimation。
以下是一个示例代码,将 QLabel 以 360 度旋转:
```python
from PyQt5.QtCore import QPropertyAnimation, QVariantAnimation, QEasingCurve
from PyQt5.QtGui import QImage, QPixmap
from PyQt5.QtWidgets import QApplication, QLabel, QWidget, QVBoxLayout
class RotatingLabel(QLabel):
def __init__(self, parent=None):
super(RotatingLabel, self).__init__(parent)
self._angle = 0
def getAngle(self):
return self._angle
def setAngle(self, angle):
self._angle = angle
self.update()
angle = property(getAngle, setAngle)
def paintEvent(self, event):
painter = QtGui.QPainter(self)
painter.translate(self.width() / 2, self.height() / 2)
painter.rotate(self.angle)
painter.drawText(-20, -10, "Hello, World!")
painter.end()
if __name__ == "__main__":
app = QApplication([])
widget = QWidget()
layout = QVBoxLayout(widget)
label = RotatingLabel()
label.setMinimumSize(200, 200)
label.setStyleSheet("background-color: white;")
layout.addWidget(label)
widget.show()
animation = QPropertyAnimation(label, b"angle", label)
animation.setDuration(2000)
animation.setStartValue(0)
animation.setEndValue(360)
animation.setEasingCurve(QEasingCurve.InOutQuart)
animation.setLoopCount(-1)
animation.start()
app.exec_()
```
在上面的代码中,我们创建了一个 RotatingLabel 类,该类继承自 QLabel,并添加了 angle 属性和 paintEvent 方法。在 paintEvent 方法中,我们使用 QPainter 对象绘制旋转后的文本。
在主程序中,我们创建了一个 QLabel 对象,并将其添加到 QVBoxLayout 布局中。然后,我们创建了一个 QPropertyAnimation 对象,并将其应用于 label 对象的 angle 属性。我们设置了动画的持续时间、起始值、结束值、缓动曲线和循环次数,并调用 start 方法启动动画。
运行程序后,您将看到 QLabel 以 360 度旋转。
阅读全文