警告
本节包含从 C++ 自动翻译到 Python 的代码段,可能包含错误。
小部件教程 - 嵌套布局#
正如小部件可以包含其他小部件一样,布局可以用于为小部件提供不同层次的分组。在这里,我们想在窗口顶部显示一个标签和一个线编辑框,在显示查询结果的表格视图之上。
我们通过创建两个布局来实现这一点:queryLayout
是一个包含 QHBoxLayout
的布局,该布局包含放置在侧边的新标签和 QLineEdit
小部件;mainLayout
是一个包含 queryLayout
和按垂直排列的 QTableView
的 QVBoxLayout
。
from PySide6 import QtWidgets if __name__ == "__main__": app = QApplication([]) window = QWidget() queryLabel = QLabel(() QApplication.translate("nestedlayouts", "Query:")) queryEdit = QLineEdit() resultView = QTableView() queryLayout = QHBoxLayout() queryLayout.addWidget(queryLabel) queryLayout.addWidget(queryEdit) mainLayout = QVBoxLayout() mainLayout.addLayout(queryLayout) mainLayout.addWidget(resultView) window.setLayout(mainLayout) # Set up the model and configure the view... window.setWindowTitle( QApplication.translate("nestedlayouts", "Nested layouts")) window.show() sys.exit(app.exec())
请注意,我们调用 mainLayout
的 addLayout()
函数来在 resultView
表格之上插入 queryLayout
。
我们省略了设置包含 QTableView
小部件显示数据的模型代码,resultView
。为了完整性,我们以下展示这部分代码。
除了 QHBoxLayout
和 QVBoxLayout
,Qt 还提供了 QGridLayout
和 QFormLayout
类,用于处理更复杂用户界面。如果在 Qt Designer 中运行,你将能看见这些类。
设置模型#
在上面的代码中,我们没有展示表格数据的来源,因为我们想专注于布局的使用。在这里,我们可以看到模型包含了与行相对应的一系列项目,每个项目都被设置为包含两列的数据。
model = QStandardItemModel() model.setHorizontalHeaderLabels({ QApplication.translate("nestedlayouts", "Name"), QApplication.translate("nestedlayouts", "Office") }) rows = { QStringList{ "Verne Nilsen", "123" }, QStringList{ "Carlos Tang", "77" }, QStringList{ "Bronwyn Hawcroft", "119" }, QStringList{ "Alessandro Hanssen", "32" }, QStringList{ "Andrew John Bakken", "54" }, QStringList{ "Vanessa Weatherley", "85" }, QStringList{ "Rebecca Dickens", "17" }, QStringList{ "David Bradley", "42" }, QStringList{ "Knut Walters", "25" }, QStringList{ "Andrea Jones", "34" } *> = QList<QStandardItem() for row in rows: items.clear() for text in row: items.append(QStandardItem(text)) model.appendRow(items) resultView.setModel(model) resultView.verticalHeader().hide() resultView.horizontalHeader().setStretchLastSection(True)