PyQt5 Tutorials

精通PyQt5 QGridLayout:完整教程

Spread the love

本教程全面讲解如何使用PyQt5强大的`QGridLayout`创建灵活且组织良好的用户界面。我们将涵盖基础知识、单元格跨越和控件拉伸等高级技巧,并提供实际示例来巩固您的理解。

目录

  1. `QGridLayout`基础用法
  2. 跨越多个单元格
  3. 控制控件拉伸
  4. 高级技巧和注意事项

1. `QGridLayout`基础用法

`QGridLayout`将控件排列在行和列的网格中。默认情况下,每个控件占据一个单元格。让我们从一个简单的例子开始:


import sys
from PyQt5.QtWidgets import QApplication, QWidget, QPushButton, QGridLayout

app = QApplication(sys.argv)
window = QWidget()
window.setWindowTitle("PyQt5 Grid Layout 示例")

layout = QGridLayout()

button1 = QPushButton("按钮 1")
button2 = QPushButton("按钮 2")
button3 = QPushButton("按钮 3")
button4 = QPushButton("按钮 4")

layout.addWidget(button1, 0, 0)  # 第0行,第0列
layout.addWidget(button2, 0, 1)  # 第0行,第1列
layout.addWidget(button3, 1, 0)  # 第1行,第0列
layout.addWidget(button4, 1, 1)  # 第1行,第1列

window.setLayout(layout)
window.show()
sys.exit(app.exec_())

这将创建一个2×2的按钮网格。`addWidget(widget, row, column)`将控件添加到指定的行和列(从零开始索引)。

2. 跨越多个单元格

要使控件跨越多行或多列,请使用`addWidget(widget, row, column, rowspan, colspan)`。`rowspan`和`colspan`定义控件占据的行数和列数。


import sys
from PyQt5.QtWidgets import QApplication, QWidget, QPushButton, QGridLayout, QLabel

app = QApplication(sys.argv)
window = QWidget()
window.setWindowTitle("PyQt5 Grid Layout 跨越示例")

layout = QGridLayout()

label = QLabel("此标签跨越两列")
button1 = QPushButton("按钮 1")
button2 = QPushButton("按钮 2")

layout.addWidget(label, 0, 0, 1, 2)  # 跨越两列
layout.addWidget(button1, 1, 0)
layout.addWidget(button2, 1, 1)

window.setLayout(layout)
window.show()
sys.exit(app.exec_())

这里,标签跨越了两列。

3. 控制控件拉伸

默认情况下,控件的大小为其最小大小。要控制控件如何扩展以填充可用空间,请使用`setColumnStretch(column, stretch)`和`setRowStretch(row, stretch)`。较高的拉伸系数意味着控件将占据可用空间的比例更大。


import sys
from PyQt5.QtWidgets import QApplication, QWidget, QPushButton, QGridLayout

app = QApplication(sys.argv)
window = QWidget()
window.setWindowTitle("PyQt5 Grid Layout 拉伸示例")

layout = QGridLayout()

button1 = QPushButton("按钮 1")
button2 = QPushButton("按钮 2")

layout.addWidget(button1, 0, 0)
layout.addWidget(button2, 0, 1)

layout.setColumnStretch(1, 2)  # 第1列的拉伸是第0列的两倍

window.setLayout(layout)
window.show()
sys.exit(app.exec_())

`button2`现在将占据`button1`水平空间的两倍。

4. 高级技巧和注意事项

对于更复杂的布局,请考虑使用:

  • `addLayout()`:在`QGridLayout`中嵌入其他布局以创建嵌套结构。
  • 对齐:使用`setAlignment()`控制控件在其单元格内的对齐方式。
  • 间距:使用`setVerticalSpacing()`和`setHorizontalSpacing()`调整行和列之间的间距。
  • 边距:使用`setContentsMargins()`控制整个网格周围的边距。

掌握这些技巧将使您能够创建复杂且高度适应性强的PyQt5界面。

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注