PyQt5 proporciona potentes administradores de diseño para organizar widgets de manera efectiva. Los diseños de caja, específicamente QVBoxLayout
(vertical) y QHBoxLayout
(horizontal), son fundamentales para crear interfaces de usuario estructuradas. Este tutorial explora estos diseños, demostrando su uso y cómo controlar la alineación de los widgets.
Tabla de contenido:
- Diseño de caja vertical (QVBoxLayout)
- Diseño de caja horizontal (QHBoxLayout)
- Controlar la alineación de los widgets
- Anidamiento de diseños para interfaces de usuario complejas
Diseño de caja vertical (QVBoxLayout)
QVBoxLayout
organiza los widgets verticalmente, apilándolos uno encima del otro. Esto es ideal para crear formularios, listas o cualquier escenario que requiera una disposición en columna.
import sys
from PyQt5.QtWidgets import QApplication, QWidget, QVBoxLayout, QLabel, QPushButton
app = QApplication(sys.argv)
window = QWidget()
window.setWindowTitle("Ejemplo de diseño de caja vertical")
layout = QVBoxLayout()
layout.addWidget(QLabel("Esta es una etiqueta."))
layout.addWidget(QPushButton("¡Haz clic!"))
layout.addWidget(QLabel("Otra etiqueta."))
window.setLayout(layout)
window.show()
sys.exit(app.exec_())
Este código crea una ventana con un diseño vertical que contiene una etiqueta, un botón y otra etiqueta.
Diseño de caja horizontal (QHBoxLayout)
QHBoxLayout
organiza los widgets horizontalmente, colocándolos uno al lado del otro. Úselo para barras de herramientas, agrupar controles relacionados u organizar widgets en una fila.
import sys
from PyQt5.QtWidgets import QApplication, QWidget, QHBoxLayout, QLabel, QPushButton
app = QApplication(sys.argv)
window = QWidget()
window.setWindowTitle("Ejemplo de diseño de caja horizontal")
layout = QHBoxLayout()
layout.addWidget(QLabel("Etiqueta 1"))
layout.addWidget(QPushButton("Botón 1"))
layout.addWidget(QLabel("Etiqueta 2"))
window.setLayout(layout)
window.show()
sys.exit(app.exec_())
Este ejemplo es similar al anterior, pero utiliza QHBoxLayout
para una disposición horizontal.
Controlar la alineación de los widgets
Los widgets en los diseños de caja predeterminan la alineación superior/izquierda. Para controlar la alineación, utilice el método setAlignment()
con indicadores como Qt.AlignHCenter
(centro horizontal), Qt.AlignVCenter
(centro vertical) o combinaciones de estos. Esto centra el widget dentro de su espacio asignado en el diseño.
import sys
from PyQt5.QtWidgets import QApplication, QWidget, QHBoxLayout, QLabel, QPushButton, Qt
app = QApplication(sys.argv)
window = QWidget()
window.setWindowTitle("Ejemplo de alineación de widgets")
layout = QHBoxLayout()
label = QLabel("Etiqueta centrada")
layout.addWidget(label)
layout.setAlignment(label, Qt.AlignHCenter | Qt.AlignVCenter)
button = QPushButton("Botón")
layout.addWidget(button)
window.setLayout(layout)
window.show()
sys.exit(app.exec_())
Este ejemplo centra una etiqueta tanto horizontal como verticalmente dentro del diseño.
Anidamiento de diseños para interfaces de usuario complejas
Para interfaces de usuario más complejas, anide diseños entre sí. Esto permite arreglos intrincados y un control preciso sobre la colocación de los widgets.
import sys
from PyQt5.QtWidgets import QApplication, QWidget, QVBoxLayout, QHBoxLayout, QLabel, QPushButton
app = QApplication(sys.argv)
window = QWidget()
window.setWindowTitle("Ejemplo de diseños anidados")
mainLayout = QVBoxLayout()
# Diseño horizontal para la sección superior
topLayout = QHBoxLayout()
topLayout.addWidget(QLabel("Superior Izquierda"))
topLayout.addWidget(QPushButton("Superior Derecha"))
mainLayout.addLayout(topLayout)
# Diseño vertical para la sección inferior
bottomLayout = QVBoxLayout()
bottomLayout.addWidget(QLabel("Inferior"))
mainLayout.addLayout(bottomLayout)
window.setLayout(mainLayout)
window.show()
sys.exit(app.exec_())
Este ejemplo demuestra el anidamiento de un diseño horizontal dentro de un diseño vertical para crear una interfaz de usuario de dos secciones.
Este tutorial proporciona una base para el uso de diseños de caja en PyQt5. Explore la documentación de PyQt5 para obtener opciones y funciones de diseño más avanzadas para crear aplicaciones sofisticadas y fáciles de usar.