Ce tutoriel fournit un guide complet sur l’utilisation du puissant QGridLayout
de PyQt5 pour créer des interfaces utilisateur flexibles et organisées. Nous aborderons les bases, des techniques avancées comme l’extension sur plusieurs cellules et le contrôle de l’étirement des widgets, et proposerons des exemples pratiques pour consolider votre compréhension.
Table des matières
- Utilisation de base de QGridLayout
- Extension sur plusieurs cellules
- Contrôle de l’étirement des widgets
- Techniques avancées et considérations
1. Utilisation de base de QGridLayout
Le QGridLayout
arrange les widgets dans une grille de lignes et de colonnes. Chaque widget occupe une seule cellule par défaut. Commençons par un exemple simple :
import sys
from PyQt5.QtWidgets import QApplication, QWidget, QPushButton, QGridLayout
app = QApplication(sys.argv)
window = QWidget()
window.setWindowTitle("Exemple de disposition en grille PyQt5")
layout = QGridLayout()
button1 = QPushButton("Bouton 1")
button2 = QPushButton("Bouton 2")
button3 = QPushButton("Bouton 3")
button4 = QPushButton("Bouton 4")
layout.addWidget(button1, 0, 0) # Ligne 0, Colonne 0
layout.addWidget(button2, 0, 1) # Ligne 0, Colonne 1
layout.addWidget(button3, 1, 0) # Ligne 1, Colonne 0
layout.addWidget(button4, 1, 1) # Ligne 1, Colonne 1
window.setLayout(layout)
window.show()
sys.exit(app.exec_())
Cela crée une grille 2×2 de boutons. addWidget(widget, row, column)
ajoute un widget à la ligne et à la colonne spécifiées (indexées à partir de zéro).
2. Extension sur plusieurs cellules
Pour faire en sorte qu’un widget s’étende sur plusieurs lignes ou colonnes, utilisez addWidget(widget, row, column, rowspan, colspan)
. rowspan
et colspan
définissent le nombre de lignes et de colonnes occupées par le widget.
import sys
from PyQt5.QtWidgets import QApplication, QWidget, QPushButton, QGridLayout, QLabel
app = QApplication(sys.argv)
window = QWidget()
window.setWindowTitle("Exemple d'extension de disposition en grille PyQt5")
layout = QGridLayout()
label = QLabel("Cette étiquette s'étend sur deux colonnes")
button1 = QPushButton("Bouton 1")
button2 = QPushButton("Bouton 2")
layout.addWidget(label, 0, 0, 1, 2) # S'étend sur deux colonnes
layout.addWidget(button1, 1, 0)
layout.addWidget(button2, 1, 1)
window.setLayout(layout)
window.show()
sys.exit(app.exec_())
Ici, l’étiquette s’étend sur deux colonnes.
3. Contrôle de l’étirement des widgets
Par défaut, les widgets sont dimensionnés à leur taille minimale. Pour contrôler la manière dont les widgets s’étendent pour remplir l’espace disponible, utilisez setColumnStretch(column, stretch)
et setRowStretch(row, stretch)
. Un facteur d’étirement plus élevé signifie que le widget occupera une part proportionnellement plus grande de l’espace disponible.
import sys
from PyQt5.QtWidgets import QApplication, QWidget, QPushButton, QGridLayout
app = QApplication(sys.argv)
window = QWidget()
window.setWindowTitle("Exemple d'étirement de disposition en grille PyQt5")
layout = QGridLayout()
button1 = QPushButton("Bouton 1")
button2 = QPushButton("Bouton 2")
layout.addWidget(button1, 0, 0)
layout.addWidget(button2, 0, 1)
layout.setColumnStretch(1, 2) # La colonne 1 s'étire deux fois plus que la colonne 0
window.setLayout(layout)
window.show()
sys.exit(app.exec_())
button2
occupera désormais deux fois l’espace horizontal de button1
.
4. Techniques avancées et considérations
Pour des dispositions plus complexes, envisagez d’utiliser :
addLayout()
: Intégrez d’autres dispositions dans unQGridLayout
pour des structures imbriquées.- Alignement : Utilisez
setAlignment()
pour contrôler l’alignement des widgets dans leurs cellules. - Espacement : Ajustez l’espacement entre les lignes et les colonnes à l’aide de
setVerticalSpacing()
etsetHorizontalSpacing()
. - Marges : Contrôlez les marges autour de la grille entière à l’aide de
setContentsMargins()
.
La maîtrise de ces techniques vous permettra de créer des interfaces PyQt5 sophistiquées et hautement adaptables.