pyqt5 写代码,要求:stackedwidget控件包含2个子控件颜色不一样,相互切换,切换动画是翻转180°,切换时长2秒
时间: 2023-05-16 12:05:26 浏览: 131
可以使用以下代码实现:
```python
from PyQt5.QtWidgets import QApplication, QMainWindow, QStackedWidget, QWidget, QPushButton
from PyQt5.QtCore import Qt, QPropertyAnimation, QEasingCurve
class MainWindow(QMainWindow):
def __init__(self):
super().__init__()
# 创建 stacked widget
self.stacked_widget = QStackedWidget()
self.setCentralWidget(self.stacked_widget)
# 创建两个子控件
self.widget1 = QWidget()
self.widget1.setStyleSheet("background-color: red;")
self.stacked_widget.addWidget(self.widget1)
self.widget2 = QWidget()
self.widget2.setStyleSheet("background-color: blue;")
self.stacked_widget.addWidget(self.widget2)
# 创建按钮用于切换子控件
self.button = QPushButton("Switch")
self.button.clicked.connect(self.switch_widget)
self.setCentralWidget(self.button)
def switch_widget(self):
# 获取当前显示的子控件的索引
current_index = self.stacked_widget.currentIndex()
# 计算下一个子控件的索引
next_index = (current_index + 1) % 2
# 创建动画
animation = QPropertyAnimation(self.stacked_widget, b"rotationY")
animation.setDuration(2000)
animation.setEasingCurve(QEasingCurve.InOutQuad)
animation.setStartValue(0)
animation.setEndValue(180)
# 切换子控件
self.stacked_widget.setCurrentIndex(next_index)
# 启动动画
animation.start()
if __name__ == "__main__":
app = QApplication([])
window = MainWindow()
window.show()
app.exec_()
```
这段代码创建了一个主窗口,其中包含一个 stacked widget 和一个按钮。stacked widget 包含两个子控件,分别为红色和蓝色。点击按钮时,会切换当前显示的子控件,并且会播放一个翻转180度的动画,切换时长为2秒。
阅读全文