87 lines
No EOL
2.7 KiB
Python
87 lines
No EOL
2.7 KiB
Python
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()) |