根据以下要求,写一个示例:pyqt5 2个stackedwidget控件的子控件切换显示,切换过程使用翻转动画,切换时长2秒
时间: 2023-05-16 20:05:20 浏览: 97
以下是示例代码:
```python
import sys
from PyQt5.QtCore import Qt, QPropertyAnimation
from PyQt5.QtWidgets import QApplication, QMainWindow, QStackedWidget, QWidget, QVBoxLayout, QPushButton
class MainWindow(QMainWindow):
def __init__(self):
super().__init__()
# 创建两个子控件
self.widget1 = QWidget()
self.widget2 = QWidget()
# 在两个子控件中添加按钮
self.button1 = QPushButton('切换到第二个控件', self.widget1)
self.button1.clicked.connect(self.switch_widget)
self.button2 = QPushButton('切换到第一个控件', self.widget2)
self.button2.clicked.connect(self.switch_widget)
# 创建一个堆叠控件,并将两个子控件添加到其中
self.stacked_widget = QStackedWidget()
self.stacked_widget.addWidget(self.widget1)
self.stacked_widget.addWidget(self.widget2)
# 将堆叠控件添加到主窗口中
self.setCentralWidget(self.stacked_widget)
def switch_widget(self):
# 获取当前显示的子控件的索引
current_index = self.stacked_widget.currentIndex()
# 计算下一个要显示的子控件的索引
next_index = (current_index + 1) % 2
# 获取当前显示的子控件和下一个要显示的子控件
current_widget = self.stacked_widget.currentWidget()
next_widget = self.stacked_widget.widget(next_index)
# 创建一个翻转动画,并设置其属性
animation = QPropertyAnimation(current_widget, b"geometry")
animation.setDuration(2000)
animation.setEasingCurve(Qt.QEasingCurve.InOutQuad)
# 将当前显示的子控件向左移出屏幕
animation.setStartValue(current_widget.geometry())
animation.setEndValue(current_widget.geometry().translated(-current_widget.width(), 0))
# 将下一个要显示的子控件从右边移入屏幕
next_widget.setGeometry(next_widget.geometry().translated(next_widget.width(), 0))
self.stacked_widget.setCurrentIndex(next_index)
animation2 = QPropertyAnimation(next_widget, b"geometry")
animation2.setDuration(2000)
animation2.setEasingCurve(Qt.QEasingCurve.InOutQuad)
animation2.setStartValue(next_widget.geometry().translated(next_widget.width(), 0))
animation2.setEndValue(next_widget.geometry())
# 同时播放两个动画
group = QParallelAnimationGroup()
group.addAnimation(animation)
group.addAnimation(animation2)
group.start(QAbstractAnimation.DeleteWhenStopped)
if __name__ == '__main__':
app = QApplication(sys.argv)
window = MainWindow()
window.show()
sys.exit(app.exec_())
```
这个示例演示了如何使用 PyQt5 创建一个带有两个堆叠控件的窗口,并在两个堆叠控件之间切换显示,切换过程使用翻转动画,切换时长为 2 秒。
阅读全文