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())
Выход: