Este tutorial fornece um guia abrangente sobre o uso do poderoso QGridLayout
do PyQt5 para criar interfaces de usuário flexíveis e organizadas. Abordaremos os conceitos básicos, técnicas avançadas como a extensão de células e o controle do alongamento de widgets, e ofereceremos exemplos práticos para solidificar sua compreensão.
Sumário
- Uso Básico do QGridLayout
- Extensão em Múltiplas Células
- Controlando o Alongamento de Widgets
- Técnicas Avançadas e Considerações
1. Uso Básico do QGridLayout
O QGridLayout
organiza widgets em uma grade de linhas e colunas. Cada widget ocupa uma única célula por padrão. Vamos começar com um exemplo simples:
import sys
from PyQt5.QtWidgets import QApplication, QWidget, QPushButton, QGridLayout
app = QApplication(sys.argv)
window = QWidget()
window.setWindowTitle("Exemplo de Layout de Grade PyQt5")
layout = QGridLayout()
button1 = QPushButton("Botão 1")
button2 = QPushButton("Botão 2")
button3 = QPushButton("Botão 3")
button4 = QPushButton("Botão 4")
layout.addWidget(button1, 0, 0) # Linha 0, Coluna 0
layout.addWidget(button2, 0, 1) # Linha 0, Coluna 1
layout.addWidget(button3, 1, 0) # Linha 1, Coluna 0
layout.addWidget(button4, 1, 1) # Linha 1, Coluna 1
window.setLayout(layout)
window.show()
sys.exit(app.exec_())
Isso cria uma grade 2×2 de botões. addWidget(widget, row, column)
adiciona um widget à linha e coluna especificadas (indexadas a partir de zero).
2. Extensão em Múltiplas Células
Para fazer um widget se estender por várias linhas ou colunas, use addWidget(widget, row, column, rowspan, colspan)
. rowspan
e colspan
definem o número de linhas e colunas que o widget ocupa.
import sys
from PyQt5.QtWidgets import QApplication, QWidget, QPushButton, QGridLayout, QLabel
app = QApplication(sys.argv)
window = QWidget()
window.setWindowTitle("Exemplo de Extensão de Layout de Grade PyQt5")
layout = QGridLayout()
label = QLabel("Este rótulo se estende por duas colunas")
button1 = QPushButton("Botão 1")
button2 = QPushButton("Botão 2")
layout.addWidget(label, 0, 0, 1, 2) # Se estende por duas colunas
layout.addWidget(button1, 1, 0)
layout.addWidget(button2, 1, 1)
window.setLayout(layout)
window.show()
sys.exit(app.exec_())
Aqui, o rótulo se estende por duas colunas.
3. Controlando o Alongamento de Widgets
Por padrão, os widgets são dimensionados para seu tamanho mínimo. Para controlar como os widgets se expandem para preencher o espaço disponível, use setColumnStretch(column, stretch)
e setRowStretch(row, stretch)
. Um fator de extensão maior significa que o widget ocupará uma parte proporcionalmente maior do espaço disponível.
import sys
from PyQt5.QtWidgets import QApplication, QWidget, QPushButton, QGridLayout
app = QApplication(sys.argv)
window = QWidget()
window.setWindowTitle("Exemplo de Alongamento de Layout de Grade PyQt5")
layout = QGridLayout()
button1 = QPushButton("Botão 1")
button2 = QPushButton("Botão 2")
layout.addWidget(button1, 0, 0)
layout.addWidget(button2, 0, 1)
layout.setColumnStretch(1, 2) # A coluna 1 se estende duas vezes mais que a coluna 0
window.setLayout(layout)
window.show()
sys.exit(app.exec_())
button2
agora ocupará o dobro do espaço horizontal de button1
.
4. Técnicas Avançadas e Considerações
Para layouts mais complexos, considere usar:
addLayout()
: Incorpore outros layouts dentro de umQGridLayout
para estruturas aninhadas.- Alinhamento: Use
setAlignment()
para controlar o alinhamento de widgets dentro de suas células. - Espaçamento: Ajuste o espaçamento entre linhas e colunas usando
setVerticalSpacing()
esetHorizontalSpacing()
. - Margens: Controle as margens ao redor da grade inteira usando
setContentsMargins()
.
Dominar essas técnicas permitirá que você crie interfaces PyQt5 sofisticadas e altamente adaptáveis.