PyQt QGridLayout в Python — макет сетки

PyQt QGridLayout позволяет размещать виджеты в однородных строках и столбцах сетки в Python.

Содержание

Что такое PyQt QGridLayout

На следующем рисунке показана сетка, состоящая из четырех столбцов и трех строк:

Использование PyQt QGridLayout

Индексация строк и столбцов начинается с нуля. Это означает, что первая строка имеет индекс ноль, вторая строка имеет индекс один и т. д. Аналогично, первый столбец имеет индекс ноль, второй столбец имеет индекс один и т. д.

Пересечение строки и столбца называется ячейкой. Ячейка — это пространство, в котором можно разместить виджет.

Строки и столбцы могут объединяться. Например, на следующем рисунке показано, что второй столбец первой строки охватывает два столбца, а вторая строка второго столбца охватывает две строки:

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())

Выход:

Пример PyQt QGridLayout

Как это работает.

  • Сначала создайте объект 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)
Похожие посты
Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *