PyQt QFormLayout в Python — макет данных

При создании формы ввода данных часто требуется размещать поля в строках. И в каждой строке вы размещаете метку рядом с виджетом ввода.

Что такое PyQt QFormLayout

PyQt предоставляет вам удобную двухколоночную форму, которая упорядочивает виджеты на форме. Левый столбец имеет метку, а правый столбец имеет виджет ввода.

Для создания макета формы используется класс PyQt QFormLayout в Python:

layout = QFormLayout(self)
self.setLayout(layout) # self is the parent widget

Добавление виджетов в макет формы можно выполнить с помощью метода addRow(). Например:

layout.addRow('Field 1', input_widget1)
layout.addRow('Field 2', input_widget2)

Метод addRow() принимает строку и виджет и автоматически создает виджет QLabel для строки.

Если вы передаете один виджет, такой как QLabel, виджет автоматически охватит оба столбца. На практике вы можете использовать эту функцию для создания заголовков или меток разделов.

Помимо предоставления удобств, QFormLayout придерживается принципов внешнего вида и поведения платформы. Например, при использовании в macOS метки выравниваются по правому краю, а при использовании в Windows — по левому.

Кроме того, при отображении на узком экране макет автоматически сворачивается в один столбец с подписями над виджетами ввода.

Пример PyQt QFormLayout

В следующем примере показано, как создать форму регистрации с использованием QFormLayout:

import sys
from PyQt6.QtWidgets import QApplication, QWidget, QPushButton, QLineEdit,  QFormLayout


class MainWindow(QWidget):
    def __init__(self, *args, **kwargs):
        super().__init__(*args, **kwargs)

        self.setWindowTitle('Sign Up Form')

        layout = QFormLayout()
        self.setLayout(layout)

        layout.addRow('Name:', QLineEdit(self))
        layout.addRow('Email:', QLineEdit(self))
        layout.addRow('Password:', QLineEdit(self, echoMode=QLineEdit.EchoMode.Password))
        layout.addRow('Confirm Password:', QLineEdit(self, echoMode=QLineEdit.EchoMode.Password))
        layout.addRow('Phone:', QLineEdit(self))

        layout.addRow(QPushButton('Sign Up'))

        # show the window
        self.show()


if __name__ == '__main__':
    app = QApplication(sys.argv)
    window = MainWindow()
    sys.exit(app.exec())

Выход:

Создание формы ввода с PyQt QFormLayout

Похожие посты
Добавить комментарий

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