PyQt5 Tutorials

Dominando Layouts Box no PyQt5: QVBoxLayout e QHBoxLayout

Spread the love

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)

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.

Deixe um comentário

O seu endereço de email não será publicado. Campos obrigatórios marcados com *