PyQt5 fornece poderosos gerenciadores de layout para organizar widgets de forma eficaz. Layouts em caixa, especificamente QVBoxLayout
(vertical) e QHBoxLayout
(horizontal), são fundamentais para criar interfaces de usuário estruturadas. Este tutorial explora esses layouts, demonstrando seu uso e como controlar o alinhamento de widgets.
Sumário:
- Layout em Caixa Vertical (QVBoxLayout)
- Layout em Caixa Horizontal (QHBoxLayout)
- Controlando o Alinhamento de Widgets
- Aninhamento de Layouts para Interfaces de Usuário Complexas
Layout em Caixa Vertical (QVBoxLayout)
QVBoxLayout
organiza os widgets verticalmente, empilhando-os um acima do outro. Isso é ideal para criar formulários, listas ou qualquer cenário que exija um arranjo em coluna.
import sys
from PyQt5.QtWidgets import QApplication, QWidget, QVBoxLayout, QLabel, QPushButton
app = QApplication(sys.argv)
window = QWidget()
window.setWindowTitle("Exemplo de Layout em Caixa Vertical")
layout = QVBoxLayout()
layout.addWidget(QLabel("Esta é uma label."))
layout.addWidget(QPushButton("Clique em mim!"))
layout.addWidget(QLabel("Outra label."))
window.setLayout(layout)
window.show()
sys.exit(app.exec_())
Este código cria uma janela com um layout vertical contendo um rótulo, um botão e outro rótulo.
Layout em Caixa Horizontal (QHBoxLayout)
QHBoxLayout
organiza os widgets horizontalmente, colocando-os lado a lado. Use isso para barras de ferramentas, agrupando controles relacionados ou organizando widgets em uma linha.
import sys
from PyQt5.QtWidgets import QApplication, QWidget, QHBoxLayout, QLabel, QPushButton
app = QApplication(sys.argv)
window = QWidget()
window.setWindowTitle("Exemplo de Layout em Caixa Horizontal")
layout = QHBoxLayout()
layout.addWidget(QLabel("Label 1"))
layout.addWidget(QPushButton("Botão 1"))
layout.addWidget(QLabel("Label 2"))
window.setLayout(layout)
window.show()
sys.exit(app.exec_())
Este exemplo é semelhante ao anterior, mas usa QHBoxLayout
para um arranjo horizontal.
Controlando o Alinhamento de Widgets
Widgets em layouts de caixa são alinhados por padrão no topo/esquerda. Para controlar o alinhamento, use o método setAlignment()
com flags como Qt.AlignHCenter
(centro horizontal), Qt.AlignVCenter
(centro vertical) ou combinações delas. Isso centraliza o widget dentro do espaço alocado no layout.
import sys
from PyQt5.QtWidgets import QApplication, QWidget, QHBoxLayout, QLabel, QPushButton, Qt
app = QApplication(sys.argv)
window = QWidget()
window.setWindowTitle("Exemplo de Alinhamento de Widget")
layout = QHBoxLayout()
label = QLabel("Label Centralizada")
layout.addWidget(label)
layout.setAlignment(label, Qt.AlignHCenter | Qt.AlignVCenter)
button = QPushButton("Botão")
layout.addWidget(button)
window.setLayout(layout)
window.show()
sys.exit(app.exec_())
Este exemplo centraliza um rótulo horizontal e verticalmente dentro do layout.
Aninhamento de Layouts para Interfaces de Usuário Complexas
Para interfaces de usuário mais complexas, aninhe layouts uns dentro dos outros. Isso permite arranjos intrincados e controle preciso sobre o posicionamento de widgets.
import sys
from PyQt5.QtWidgets import QApplication, QWidget, QVBoxLayout, QHBoxLayout, QLabel, QPushButton
app = QApplication(sys.argv)
window = QWidget()
window.setWindowTitle("Exemplo de Layouts Aninhados")
mainLayout = QVBoxLayout()
# Layout horizontal para a seção superior
topLayout = QHBoxLayout()
topLayout.addWidget(QLabel("Superior Esquerdo"))
topLayout.addWidget(QPushButton("Superior Direito"))
mainLayout.addLayout(topLayout)
# Layout vertical para a seção inferior
bottomLayout = QVBoxLayout()
bottomLayout.addWidget(QLabel("Inferior"))
mainLayout.addLayout(bottomLayout)
window.setLayout(mainLayout)
window.show()
sys.exit(app.exec_())
Este exemplo demonstra o aninhamento de um layout horizontal dentro de um layout vertical para criar uma interface de usuário de duas seções.
Este tutorial fornece uma base para o uso de layouts de caixa em PyQt5. Explore a documentação do PyQt5 para opções e recursos de layout mais avançados para construir aplicativos sofisticados e amigáveis ao usuário.