PyQt5 предоставляет мощные менеджеры компоновки для эффективного расположения виджетов. Бокс-компоновки, в частности QVBoxLayout
(вертикальная) и QHBoxLayout
(горизонтальная), являются основополагающими для создания структурированных пользовательских интерфейсов. В этом руководстве рассматриваются эти компоновки, демонстрируется их использование и управление выравниванием виджетов.
Оглавление:
- Вертикальная компоновка (QVBoxLayout)
- Горизонтальная компоновка (QHBoxLayout)
- Управление выравниванием виджетов
- Вложенные компоновки для сложных UI
Вертикальная компоновка (QVBoxLayout)
QVBoxLayout
располагает виджеты вертикально, размещая их один над другим. Это идеально подходит для создания форм, списков или любых сценариев, требующих столбчатого расположения.
import sys
from PyQt5.QtWidgets import QApplication, QWidget, QVBoxLayout, QLabel, QPushButton
app = QApplication(sys.argv)
window = QWidget()
window.setWindowTitle("Пример вертикальной компоновки")
layout = QVBoxLayout()
layout.addWidget(QLabel("Это метка."))
layout.addWidget(QPushButton("Нажми меня!"))
layout.addWidget(QLabel("Ещё одна метка."))
window.setLayout(layout)
window.show()
sys.exit(app.exec_())
Этот код создает окно с вертикальной компоновкой, содержащей метку, кнопку и ещё одну метку.
Горизонтальная компоновка (QHBoxLayout)
QHBoxLayout
располагает виджеты горизонтально, размещая их рядом. Используйте это для панелей инструментов, группировки связанных элементов управления или расположения виджетов в ряд.
import sys
from PyQt5.QtWidgets import QApplication, QWidget, QHBoxLayout, QLabel, QPushButton
app = QApplication(sys.argv)
window = QWidget()
window.setWindowTitle("Пример горизонтальной компоновки")
layout = QHBoxLayout()
layout.addWidget(QLabel("Метка 1"))
layout.addWidget(QPushButton("Кнопка 1"))
layout.addWidget(QLabel("Метка 2"))
window.setLayout(layout)
window.show()
sys.exit(app.exec_())
Этот пример аналогичен предыдущему, но использует QHBoxLayout
для горизонтального расположения.
Управление выравниванием виджетов
Виджеты в бокс-компоновках по умолчанию выравниваются по верхнему/левому краю. Для управления выравниванием используйте метод setAlignment()
с флагами, такими как Qt.AlignHCenter
(горизонтальный центр), Qt.AlignVCenter
(вертикальный центр) или их комбинациями. Это центрирует виджет внутри выделенного для него пространства в компоновке.
import sys
from PyQt5.QtWidgets import QApplication, QWidget, QHBoxLayout, QLabel, QPushButton, Qt
app = QApplication(sys.argv)
window = QWidget()
window.setWindowTitle("Пример выравнивания виджетов")
layout = QHBoxLayout()
label = QLabel("Центрированная метка")
layout.addWidget(label)
layout.setAlignment(label, Qt.AlignHCenter | Qt.AlignVCenter)
button = QPushButton("Кнопка")
layout.addWidget(button)
window.setLayout(layout)
window.show()
sys.exit(app.exec_())
В этом примере метка центрируется как по горизонтали, так и по вертикали внутри компоновки.
Вложенные компоновки для сложных UI
Для более сложных UI вкладывайте компоновки друг в друга. Это позволяет создавать сложные расположения и тонко настраивать размещение виджетов.
import sys
from PyQt5.QtWidgets import QApplication, QWidget, QVBoxLayout, QHBoxLayout, QLabel, QPushButton
app = QApplication(sys.argv)
window = QWidget()
window.setWindowTitle("Пример вложенных компоновок")
mainLayout = QVBoxLayout()
# Горизонтальная компоновка для верхней секции
topLayout = QHBoxLayout()
topLayout.addWidget(QLabel("Верхний левый"))
topLayout.addWidget(QPushButton("Верхний правый"))
mainLayout.addLayout(topLayout)
# Вертикальная компоновка для нижней секции
bottomLayout = QVBoxLayout()
bottomLayout.addWidget(QLabel("Нижний"))
mainLayout.addLayout(bottomLayout)
window.setLayout(mainLayout)
window.show()
sys.exit(app.exec_())
В этом примере демонстрируется вложение горизонтальной компоновки в вертикальную для создания двухсекционного UI.
Это руководство предоставляет основу для использования бокс-компоновок в PyQt5. Изучите документацию PyQt5 для получения дополнительных опций компоновки и функций для создания сложных и удобных для пользователя приложений.