Este tutorial proporciona una guía completa sobre el uso del potente QGridLayout
de PyQt5 para crear interfaces de usuario flexibles y organizadas. Cubriremos los conceptos básicos, técnicas avanzadas como la expansión de celdas y el control del estiramiento de widgets, y ofreceremos ejemplos prácticos para solidificar su comprensión.
Tabla de Contenidos
- Uso Básico de QGridLayout
- Expandiendo Múltiples Celdas
- Controlando el Estiramiento de Widgets
- Técnicas Avanzadas y Consideraciones
1. Uso Básico de QGridLayout
El QGridLayout
organiza los widgets en una cuadrícula de filas y columnas. Cada widget ocupa una sola celda por defecto. Comencemos con un ejemplo simple:
import sys
from PyQt5.QtWidgets import QApplication, QWidget, QPushButton, QGridLayout
app = QApplication(sys.argv)
window = QWidget()
window.setWindowTitle("Ejemplo de Diseño de Cuadrícula PyQt5")
layout = QGridLayout()
button1 = QPushButton("Botón 1")
button2 = QPushButton("Botón 2")
button3 = QPushButton("Botón 3")
button4 = QPushButton("Botón 4")
layout.addWidget(button1, 0, 0) # Fila 0, Columna 0
layout.addWidget(button2, 0, 1) # Fila 0, Columna 1
layout.addWidget(button3, 1, 0) # Fila 1, Columna 0
layout.addWidget(button4, 1, 1) # Fila 1, Columna 1
window.setLayout(layout)
window.show()
sys.exit(app.exec_())
Esto crea una cuadrícula de 2×2 botones. addWidget(widget, row, column)
agrega un widget a la fila y columna especificadas (indexadas desde cero).
2. Expandiendo Múltiples Celdas
Para hacer que un widget se extienda sobre varias filas o columnas, use addWidget(widget, row, column, rowspan, colspan)
. rowspan
y colspan
definen el número de filas y columnas que ocupa el widget.
import sys
from PyQt5.QtWidgets import QApplication, QWidget, QPushButton, QGridLayout, QLabel
app = QApplication(sys.argv)
window = QWidget()
window.setWindowTitle("Ejemplo de Expansión de Diseño de Cuadrícula PyQt5")
layout = QGridLayout()
label = QLabel("Esta etiqueta abarca dos columnas")
button1 = QPushButton("Botón 1")
button2 = QPushButton("Botón 2")
layout.addWidget(label, 0, 0, 1, 2) # Abarca dos columnas
layout.addWidget(button1, 1, 0)
layout.addWidget(button2, 1, 1)
window.setLayout(layout)
window.show()
sys.exit(app.exec_())
Aquí, la etiqueta abarca dos columnas.
3. Controlando el Estiramiento de Widgets
Por defecto, los widgets se dimensionan a su tamaño mínimo. Para controlar cómo los widgets se expanden para llenar el espacio disponible, use setColumnStretch(column, stretch)
y setRowStretch(row, stretch)
. Un factor de estiramiento mayor significa que el widget ocupará una parte proporcionalmente mayor del espacio disponible.
import sys
from PyQt5.QtWidgets import QApplication, QWidget, QPushButton, QGridLayout
app = QApplication(sys.argv)
window = QWidget()
window.setWindowTitle("Ejemplo de Estiramiento de Diseño de Cuadrícula PyQt5")
layout = QGridLayout()
button1 = QPushButton("Botón 1")
button2 = QPushButton("Botón 2")
layout.addWidget(button1, 0, 0)
layout.addWidget(button2, 0, 1)
layout.setColumnStretch(1, 2) # La columna 1 se estira el doble que la columna 0
window.setLayout(layout)
window.show()
sys.exit(app.exec_())
button2
ahora ocupará el doble del espacio horizontal de button1
.
4. Técnicas Avanzadas y Consideraciones
Para diseños más complejos, considere usar:
addLayout()
: Incruste otros diseños dentro de unQGridLayout
para estructuras anidadas.- Alineación: Use
setAlignment()
para controlar la alineación de los widgets dentro de sus celdas. - Espaciado: Ajuste el espaciado entre filas y columnas usando
setVerticalSpacing()
ysetHorizontalSpacing()
. - Márgenes: Controle los márgenes alrededor de toda la cuadrícula usando
setContentsMargins()
.
Dominar estas técnicas le permitirá crear interfaces PyQt5 sofisticadas y altamente adaptables.