import sys from PyQt5.QtCore import Qt from PyQt5.QtWidgets import (QApplication, QMainWindow, QStackedLayout, QWidget, QToolBar, QToolButton, QStyle, QColorDialog, QFontDialog, QVBoxLayout, QGroupBox, QRadioButton) class DemoStackedLayout(QMainWindow): def __init__(self, parent=None): super(DemoStackedLayout, self).__init__(parent) # 设置窗口标题 self.setWindowTitle('实战PyQt5: QStackedLayout Demo!') # 设置窗口大小 self.resize(480, 360) self.initUi() def initUi(self): toolBar = QToolBar(self) self.addToolBar(Qt.LeftToolBarArea, toolBar) btnColor = self.createButton('颜色对话框') btnColor.clicked.connect(lambda: self.onButtonClicked(0)) toolBar.addWidget(btnColor) btnFont = self.createButton('字体对话框') btnFont.clicked.connect(lambda: self.onButtonClicked(1)) toolBar.addWidget(btnFont) btnUser = self.createButton('分组部件') btnUser.clicked.connect(lambda: self.onButtonClicked(2)) toolBar.addWidget(btnUser) mainWidget = QWidget(self) self.mainLayout = QStackedLayout(mainWidget) # 添加三个widget,演示三个页面之间的切换 # 颜色对话框 self.mainLayout.addWidget(QColorDialog(self)) # 字体对话框 self.mainLayout.addWidget(QFontDialog(self)) # 自定义控件 self.mainLayout.addWidget(self.createExclusiveGroup()) mainWidget.setLayout(self.mainLayout) # 设置中心窗口 self.setCentralWidget(mainWidget) def createButton(self, text): icon = QApplication.style().standardIcon(QStyle.SP_DesktopIcon) btn = QToolButton(self) btn.setText(text) btn.setIcon(icon) btn.setToolButtonStyle(Qt.ToolButtonTextUnderIcon) return btn def onButtonClicked(self, index): if index < self.mainLayout.count(): self.mainLayout.setCurrentIndex(index) def createExclusiveGroup(self): groupBox = QGroupBox('Exclusive Radio Buttons', self) radio1 = QRadioButton('&Radio Button 1', self) radio1.setChecked(True) radio2 = QRadioButton('R&adio button 2', self) radio3 = QRadioButton('Ra&dio button 3', self) vLayout = QVBoxLayout(groupBox) vLayout.addWidget(radio1) vLayout.addWidget(radio2) vLayout.addWidget(radio3) vLayout.addStretch(1) groupBox.setLayout(vLayout) return groupBox if __name__ == '__main__': app = QApplication(sys.argv) window = DemoStackedLayout() window.show() sys.exit(app.exec())