PyQt5 Tutorials

Полное руководство по PyQt5 QGridLayout

Spread the love

Это руководство предоставляет исчерпывающее описание использования мощного QGridLayout из PyQt5 для создания гибких и организованных пользовательских интерфейсов. Мы рассмотрим основы, продвинутые техники, такие как разбиение ячеек и управление растяжением виджетов, и предложим практические примеры для закрепления вашего понимания.

Оглавление

  1. Базовое использование QGridLayout
  2. Разбиение на несколько ячеек
  3. Управление растяжением виджетов
  4. Продвинутые техники и рекомендации

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.

Добавить комментарий

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