PyQt5-高级控件-容器StackedWidget
QTackedWidget是一个堆栈窗口控件,可以填充一些小控件,但是同一时间只有一个小控件可以显示。
QStackedWidget使用QStackedLayout布局。QSTackedWidget控件与QTabWidget类似,可以有效的显示窗口的控件。
from PyQt5.Qt import *
import sysclass MainWindow(QWidget):def __init__(self):super().__init__()self.setWindowTitle('StackedWidget-基本使用')# 创建列表窗口,添加条目self.list_widget = QListWidget()self.list_widget.insertItem(0, '联系方式')self.list_widget.insertItem(1, '个人信息')self.list_widget.insertItem(2, '教育程度')# 创建三个视图控件self.stack1 = QWidget()self.stack2 = QWidget()self.stack3 = QWidget()self.stack1_ui()self.stack2_ui()self.stack3_ui()# 在QStackedWidget对象中填充了三个子控件self.stack = QStackedWidget(self)self.stack.addWidget(self.stack1)self.stack.addWidget(self.stack2)self.stack.addWidget(self.stack3)# 主界面,使用水平布局h_layout = QHBoxLayout()h_layout.addWidget(self.list_widget)h_layout.addWidget(self.stack)self.setLayout(h_layout)self.list_widget.currentRowChanged.connect(self.display)def stack1_ui(self):f_l = QFormLayout()f_l.addRow('姓名', QLineEdit())f_l.addRow('地址', QLineEdit())self.stack1.setLayout(f_l)def stack2_ui(self):h_l = QHBoxLayout()h_l.addWidget(QRadioButton('男'))h_l.addWidget(QRadioButton('女'))f_l = QFormLayout()f_l.addRow(QLabel('性别'), h_l)f_l.addRow('生日', QLineEdit())self.stack2.setLayout(f_l)def stack3_ui(self):h_l = QHBoxLayout()h_l.addWidget(QLabel('科目'))h_l.addWidget(QCheckBox('语文'))h_l.addWidget(QCheckBox('数学'))self.stack3.setLayout(h_l)def display(self, row_index: int):# 使用QListWidget的行索引值,改变StackedWidget堆叠控件的视图self.stack.setCurrentIndex(row_index)if __name__ == '__main__':app = QApplication(sys.argv)demo = MainWindow()demo.show()sys.exit(app.exec_())
运行效果图