PyQt - QGridLayout 类



一个 **GridLayout** 类对象呈现一个由行和列排列的单元格网格。该类包含 **addWidget()** 方法。可以通过指定单元格的行数和列数来添加任何小部件。如果指定了行和列的跨度因子,则小部件可以比一个单元格更宽或更高。

addWidget() 方法有两个重载,如下所示:

序号 方法及描述
1

addWidget(QWidget, int r, int c)

在指定行和列添加小部件

2

addWidget(QWidget, int r, int c, int rowspan, int columnspan)

在指定行和列添加小部件,并具有指定的宽度和/或高度

子布局对象也可以添加到网格中的任何单元格。

序号 方法及描述
1

addLayout(QLayout, int r, int c)

在指定行和列添加布局对象

QGridLayout 中的列方法

QGridLayout 包含两个列方法:

  • **setColumnMinimumWidth()** - 设置容器的最小宽度。
  • **setColumnStretch()** - 设置列将获得的超出其必要的额外空间量。

使用嵌套循环和 setGeometry() 方法的网格布局

网格布局是使用 setGeometry() 方法构造的,此方法指的是 pushbutton 的大小和位置。因此,我们使用嵌套 for 循环和 addWidget() 方法来执行此任务。

示例

在下面的示例中,我们创建了一个包含 16 个按钮的网格布局,这些按钮排列在 4 行 4 列中。

import sys
from PyQt6.QtWidgets import QApplication, QWidget, QGridLayout, QPushButton
def window():
   app = QApplication(sys.argv)
   win = QWidget()
   grid = QGridLayout()

   for i in range(1, 5):
      for j in range(1, 5):
         grid.addWidget(QPushButton("B" + str(i) + str(j)), i, j)

   win.setLayout(grid)
   win.setGeometry(100, 100, 200, 100)
   win.setWindowTitle("PyQt")
   win.show()
   sys.exit(app.exec())

if __name__ == '__main__':
   window()

输出

以上代码产生以下输出:

qgridlayout Example One

代码使用两个嵌套的 for 循环分别表示行和列号,用变量 **i** 和 **j** 表示。它们被转换为字符串以连接每个按钮的标题,该按钮将添加到第 i 行和第 j 列。

使用 QGridLayout 的两列布局

两列布局使用高度相等、宽度相等且在计算机或移动屏幕上并排可见的列。在 PyQt 中,我们将盒子组分成两列,这可以通过 QGridLayout 类的各种内置函数构建 - QGridLayout()、QPushButton()、setLayout() 和 setLayout()。

示例

以下示例演示了使用 QGridlayout 的两列布局代码。

from PyQt6.QtWidgets import QApplication, QWidget, QGridLayout, QPushButton
class TwoColumnLayout(QWidget):
   def __init__(self):
      super().__init__()

      # Create a QGridLayout instance
      layout = QGridLayout()
      # Add widgets to the layout
      for i in range(10):
         layout.addWidget(QPushButton(f'Box {i+1}'), i // 2, i % 2)
      # Set the layout on the application's window
      self.setLayout(layout)

app = QApplication([])
window = TwoColumnLayout()
window.setWindowTitle('PyQt')
window.show()
app.exec()

输出

以上代码产生以下输出:

Two Column Layout
广告