QStackedLayout 堆叠布局
QStackedLayout 提供一个管理子窗口的栈,在某一时刻只有一个子窗口可见。
QStackedLayout 使用 addWidget 添加子窗口,index按添加先后顺序从0开始。
QStackedLayout 使用 setCurrentIndex(index) 来显示当前子窗口。
下面是一个 demo
#!/usr/bin/env python # -*- coding: utf-8 -*- """ @author: wind @contact: 367059791@qq.com @time: 2022/01/17 17:36 @file: demo_stackedlayout.py @desc: """ import sys from PySide2.QtCore import Qt from PySide2.QtWidgets import ( QApplication, QMainWindow, QWidget, QStackedLayout, QToolBar, QToolButton, QStyle, QColorDialog, QFontDialog ) class DemoStackedLayout(QMainWindow): def __init__(self, parent=None): super(DemoStackedLayout, self).__init__(parent) self.setWindowTitle('QStackedLayout Demo!') self.resize(600, 400) btn_color = self.create_tool_btn("颜色") btn_font = self.create_tool_btn("字体") btn_color.clicked.connect(lambda: self.on_btn_clicked(0)) btn_font.clicked.connect(lambda: self.on_btn_clicked(1)) tool_bar = QToolBar(self) tool_bar.addWidget(btn_color) tool_bar.addWidget(btn_font) self.addToolBar(Qt.LeftToolBarArea, tool_bar) main_widget = QWidget(self) self.mainLayout = QStackedLayout(main_widget) # self.mainLayout.addWidget(QColorDialog(self)) # 0 self.mainLayout.addWidget(QFontDialog(self)) # 1 main_widget.setLayout(self.mainLayout) self.setCentralWidget(main_widget) def create_tool_btn(self, text, icon=None, style=None): btn = QToolButton(self) btn.setText(text) btn.setToolButtonStyle(Qt.ToolButtonTextUnderIcon) btn.setIcon(QApplication.style().standardIcon(QStyle.SP_DesktopIcon)) return btn def on_btn_clicked(self, index): if index < self.mainLayout.count(): self.mainLayout.setCurrentIndex(index) # if __name__ == '__main__': app = QApplication(sys.argv) window = DemoStackedLayout() window.show() sys.exit(app.exec_())
运行如下: