PyQt QGridLayout в Python — макет сетки
PyQt QGridLayout позволяет размещать виджеты в однородных строках и столбцах сетки в Python.
Что такое PyQt QGridLayout
На следующем рисунке показана сетка, состоящая из четырех столбцов и трех строк:
Индексация строк и столбцов начинается с нуля. Это означает, что первая строка имеет индекс ноль, вторая строка имеет индекс один и т. д. Аналогично, первый столбец имеет индекс ноль, второй столбец имеет индекс один и т. д.
Пересечение строки и столбца называется ячейкой. Ячейка — это пространство, в котором можно разместить виджет.
Строки и столбцы могут объединяться. Например, на следующем рисунке показано, что второй столбец первой строки охватывает два столбца, а вторая строка второго столбца охватывает две строки:
Если виджет занимает меньше места, чем содержащая его ячейка, вы можете выровнять его внутри ячейки, используя один из следующих вариантов выравнивания:
Флаг выравнивания | Значение |
---|---|
AlignAbsolute | Если направление слева направо, AlignLeft означает выравнивание по правому краю. Однако, если вы хотите, чтобы AlignLeft всегда был выровнен по левому краю, вы можете объединить AlignLeft с опцией AlignAbsolute. |
AlignBaseline | Выравнивание виджета по базовой линии. |
AlignBottom | Выравнивание виджета по нижнему краю. |
AlignCenter | Центрирует виджет в обоих измерениях. |
AlignHCenter | Центрирует виджет по горизонтали в доступном пространстве. |
AlignHorizontal_Mask | Выровнять по левому краю | Выровнять по правому краю | Выровнять по центру | Выровнять по ширине | Выровнять по абсолютному краю |
AlignJustify | Выравнивает текст по доступному пространству. |
AlignLeft | Выравнивание виджета по левому краю. |
AlignRight | По правому краю. |
AlignTop | По верхнему краю. |
AlignVCenter | Центрирует виджет по вертикали в доступном пространстве. |
AlignVertical_Mask | Выровнять по верху | Выровнять по низу | Выровнять по центру | Выровнять по базовой линии |
Использование QGridLayout
Чтобы использовать QGridLayout, выполните следующие действия:
- Сначала создайте объект QGridLayout:
layout = QGridLayout()
- Во-вторых, задайте макет родительского виджета:
parent.setLayout(layout)
- В-третьих, разместите дочерние виджеты на сетке:
layout.addWidget(widget, row, column, rowSpan, columnSpan, alignment)
В этом синтаксисе:
- widget — это дочерний виджет, который вы хотите разместить в сетке.
- row — это индекс строки, начинающийся с 0.
- column — это индекс столбца, начинающийся с 0.
- rowSpan — количество строк, которые вы хотите охватить.
- columnSpan — количество столбцов, которые вы хотите охватить.
- alignment определяет выравнивание виджета внутри ячейки.
Чтобы получить значение выравнивания, импортируйте Qt из PyQt6.QtCore:
from PyQt6.QtCore import Qt
и используйте одно из значений перечисления Qt.AlignmentFlag, например:
Qt.AlignmentFlag.AlignRight
Пример PyQt QGridLayout
В следующем примере показано, как создать форму входа с использованием QGridLayout:
import sys from PyQt6.QtWidgets import QApplication, QWidget, QPushButton, QLineEdit, QLabel, QGridLayout from PyQt6.QtCore import Qt class MainWindow(QWidget): def __init__(self, *args, **kwargs): super().__init__(*args, **kwargs) self.setWindowTitle('Login Form') # set the grid layout layout = QGridLayout() self.setLayout(layout) # username layout.addWidget(QLabel('Username:'), 0, 0) layout.addWidget(QLineEdit(), 0, 1) # password layout.addWidget(QLabel('Password:'), 1, 0) layout.addWidget(QLineEdit(echoMode=QLineEdit.EchoMode.Password), 1, 1) # buttons layout.addWidget(QPushButton('Log in'), 2, 0, alignment=Qt.AlignmentFlag.AlignRight) layout.addWidget(QPushButton('Close'), 2, 1, alignment=Qt.AlignmentFlag.AlignRight) # show the window self.show() if __name__ == '__main__': app = QApplication(sys.argv) window = MainWindow() sys.exit(app.exec())
Выход:
Как это работает.
- Сначала создайте объект QGridLayout:
layout = QGridLayout() self.setLayout(layout)
- Во-вторых, поместите QLabel в ячейку(0,0) и QLineEdit в ячейку(0,1) для создания поля имени пользователя:
layout.addWidget(QLabel('Username:'), 0, 0) layout.addWidget(QLineEdit(), 0, 1)
- В-третьих, поместите QLabel в ячейку(1,0) и QLineEdit в ячейку(1,1) для создания поля пароля:
layout.addWidget(QLabel('Password:'), 1, 0) layout.addWidget(QLineEdit(echoMode=QLineEdit.EchoMode.Password), 1, 1)
- Наконец, поместите кнопку входа в ячейку(2,0) и выровняйте ее по левому краю. Также поместите кнопку закрытия в ячейку(2,1) и выровняйте ее по правому краю.
# buttons layout.addWidget(QPushButton('Log in'), 2, 0, alignment=Qt.AlignmentFlag.AlignRight) layout.addWidget(QPushButton('Close'), 2, 1, alignment=Qt.AlignmentFlag.AlignRight)