Это руководство предоставляет исчерпывающее описание использования мощного QGridLayout
из PyQt5 для создания гибких и организованных пользовательских интерфейсов. Мы рассмотрим основы, продвинутые техники, такие как разбиение ячеек и управление растяжением виджетов, и предложим практические примеры для закрепления вашего понимания.
Оглавление
- Базовое использование QGridLayout
- Разбиение на несколько ячеек
- Управление растяжением виджетов
- Продвинутые техники и рекомендации
1. Базовое использование QGridLayout
QGridLayout
упорядочивает виджеты в сетке строк и столбцов. Каждый виджет по умолчанию занимает одну ячейку. Начнем с простого примера:
import sys
from PyQt5.QtWidgets import QApplication, QWidget, QPushButton, QGridLayout
app = QApplication(sys.argv)
window = QWidget()
window.setWindowTitle("Пример сетки PyQt5")
layout = QGridLayout()
button1 = QPushButton("Кнопка 1")
button2 = QPushButton("Кнопка 2")
button3 = QPushButton("Кнопка 3")
button4 = QPushButton("Кнопка 4")
layout.addWidget(button1, 0, 0) # Строка 0, Столбец 0
layout.addWidget(button2, 0, 1) # Строка 0, Столбец 1
layout.addWidget(button3, 1, 0) # Строка 1, Столбец 0
layout.addWidget(button4, 1, 1) # Строка 1, Столбец 1
window.setLayout(layout)
window.show()
sys.exit(app.exec_())
Это создает сетку 2×2 из кнопок. addWidget(widget, row, column)
добавляет виджет в указанную строку и столбец (с нулевой индексацией).
2. Разбиение на несколько ячеек
Чтобы виджет занимал несколько строк или столбцов, используйте addWidget(widget, row, column, rowspan, colspan)
. rowspan
и colspan
определяют количество строк и столбцов, которые занимает виджет.
import sys
from PyQt5.QtWidgets import QApplication, QWidget, QPushButton, QGridLayout, QLabel
app = QApplication(sys.argv)
window = QWidget()
window.setWindowTitle("Пример разбиения ячеек PyQt5")
layout = QGridLayout()
label = QLabel("Эта метка занимает два столбца")
button1 = QPushButton("Кнопка 1")
button2 = QPushButton("Кнопка 2")
layout.addWidget(label, 0, 0, 1, 2) # Занимает два столбца
layout.addWidget(button1, 1, 0)
layout.addWidget(button2, 1, 1)
window.setLayout(layout)
window.show()
sys.exit(app.exec_())
Здесь метка занимает два столбца.
3. Управление растяжением виджетов
По умолчанию виджеты имеют размер своего минимального размера. Чтобы управлять тем, как виджеты расширяются, чтобы заполнить доступное пространство, используйте setColumnStretch(column, stretch)
и setRowStretch(row, stretch)
. Больший коэффициент растяжения означает, что виджет займет пропорционально большую долю доступного пространства.
import sys
from PyQt5.QtWidgets import QApplication, QWidget, QPushButton, QGridLayout
app = QApplication(sys.argv)
window = QWidget()
window.setWindowTitle("Пример растяжения PyQt5")
layout = QGridLayout()
button1 = QPushButton("Кнопка 1")
button2 = QPushButton("Кнопка 2")
layout.addWidget(button1, 0, 0)
layout.addWidget(button2, 0, 1)
layout.setColumnStretch(1, 2) # Столбец 1 растягивается вдвое больше, чем столбец 0
window.setLayout(layout)
window.show()
sys.exit(app.exec_())
button2
теперь будет занимать вдвое больше горизонтального пространства, чем button1
.
4. Продвинутые техники и рекомендации
Для более сложных макетов рассмотрите использование:
addLayout()
: Встраивайте другие макеты вQGridLayout
для вложенных структур.- Выравнивание: Используйте
setAlignment()
для управления выравниванием виджетов внутри их ячеек. - Интервалы: Регулируйте интервалы между строками и столбцами с помощью
setVerticalSpacing()
иsetHorizontalSpacing()
. - Поля: Управляйте полями вокруг всей сетки с помощью
setContentsMargins()
.
Освоив эти методы, вы сможете создавать сложные и высокоадаптивные интерфейсы PyQt5.