使用PySide6 创建一个 二值开关, 并添加动画效果
时间: 2024-05-08 11:15:25 浏览: 145
以下是一个示例代码,用于创建一个带有动画效果的二值开关。
```python
import sys
from PySide6.QtCore import Qt, QSize, QPropertyAnimation
from PySide6.QtGui import QPainter, QColor, QPen
from PySide6.QtWidgets import QApplication, QWidget
class BinarySwitch(QWidget):
def __init__(self):
super().__init__()
self.setFixedSize(QSize(80, 40))
self.on = False
self.animation = None
def paintEvent(self, event):
qp = QPainter(self)
qp.setRenderHint(QPainter.Antialiasing)
if self.on:
qp.setPen(QPen(QColor(0, 255, 0), 3))
qp.setBrush(QColor(0, 255, 0))
qp.drawRoundedRect(4, 4, 32, 32, 16, 16)
else:
qp.setPen(QPen(QColor(255, 0, 0), 3))
qp.setBrush(QColor(255, 0, 0))
qp.drawRoundedRect(44, 4, 32, 32, 16, 16)
def mousePressEvent(self, event):
if not self.animation:
self.on = not self.on
self.animation = QPropertyAnimation(self, b"pos", self)
self.animation.setDuration(300)
self.animation.setStartValue(self.pos())
if self.on:
self.animation.setEndValue(self.pos() + QSize(40, 0))
else:
self.animation.setEndValue(self.pos() - QSize(40, 0))
self.animation.finished.connect(self.animationFinished)
self.animation.start()
def animationFinished(self):
self.animation = None
self.update()
if __name__ == "__main__":
app = QApplication(sys.argv)
switch = BinarySwitch()
switch.show()
sys.exit(app.exec())
```
在此示例中,我们创建了一个名为 BinarySwitch 的 QWidget 子类。我们覆盖了 paintEvent 和 mousePressEvent 方法来绘制开关,并在单击时切换开关状态并启动动画。
在 paintEvent 方法中,我们使用 QPainter 绘制了开关。如果开关处于打开状态,我们将绘制一个绿色的圆角矩形,否则我们将绘制一个红色的圆角矩形。
在 mousePressEvent 方法中,我们检查是否已经有动画正在运行。如果没有,我们将切换开关状态并创建一个 QPropertyAnimation 对象来处理动画效果。我们将动画的持续时间设置为 300 毫秒,并在其结束时连接到 animationFinished 方法。
在 animationFinished 方法中,我们将清除动画并更新窗口以重新绘制开关。
此示例仅是一个简单的例子,您可以根据自己的需要进行扩展和修改。
阅读全文