Gestion de la mise en page Python PyQt

Dans le développement d'applications GUI,la gestion de la mise en pagedésigne la façon d'organiser et de disposer divers contrôles (tels que des boutons, des zones de texte, etc.) dans une fenêtre.

PyQt fournit plusieurs gestionnaires de mise en page qui peuvent nous aider à ajuster automatiquement la position et la taille des contrôles, afin que l'interface puisse conserver un bon affichage dans des fenêtres de tailles différentes.

Pourquoi la gestion de la mise en page est nécessaire

  1. S'adapter à différentes résolutions: Les utilisateurs peuvent utiliser des écrans de tailles différentes
  2. Simplifier le développement: Pas besoin de calculer manuellement la position de chaque contrôle
  3. Maintenance facile: Lors de l'ajout ou de la suppression de contrôles, la mise en page s'ajuste automatiquement

Principaux gestionnaires de mise en page de PyQt

PyQt fournit les gestionnaires de mise en page couramment utilisés suivants :

1. QHBoxLayout - Mise en page horizontale

Dispose les contrôles horizontalement de gauche à droite.

Exemple

layout = QHBoxLayout()
layout.addWidget(QPushButton("Bouton 1"))
layout.addWidget(QPushButton("Bouton 2"))
layout.addWidget(QPushButton("Bouton 3"))

2. QVBoxLayout - Disposition verticale

Dispose les contrôles verticalement de haut en bas.

Exemple

layout = QVBoxLayout()
layout.addWidget(QPushButton("Bouton 1"))
layout.addWidget(QPushButton("Bouton 2"))
layout.addWidget(QPushButton("Bouton 3"))

3. QGridLayout - Disposition en grille

Dispose les contrôles en lignes et en colonnes dans une grille.

Exemple

layout = QGridLayout()
layout.addWidget(QPushButton("1,1"), 0, 0)  # Ligne 0, Colonne 0
layout.addWidget(QPushButton("1,2"), 0, 1)  # Ligne 0, Colonne 1
layout.addWidget(QPushButton("2,1"), 1, 0)  # Ligne 1, Colonne 0

4. QFormLayout - Disposition de formulaire

Particulièrement adapté à la création d'interfaces de formulaire avec des paires libellé-champ.

Exemple

layout = QFormLayout()
layout.addRow("Nom :", QLineEdit())
layout.addRow("Âge :", QLineEdit())

Utilisation imbriquée des dispositions

Dans les applications pratiques, nous devons souvent combiner plusieurs gestionnaires de disposition pour créer des interfaces complexes.

Exemple : disposition de la fenêtre principale

Exemple

# Créer la fenêtre principale
window = QWidget()

# Créer la disposition verticale principale
main_layout = QVBoxLayout()

# Ajouter une disposition horizontale en haut
top_layout = QHBoxLayout()
top_layout.addWidget(QPushButton("Fichier"))
top_layout.addWidget(QPushButton("Modifier"))
main_layout.addLayout(top_layout)

# Ajouter une disposition en grille centrale
center_layout = QGridLayout()
center_layout.addWidget(QTextEdit(), 0, 0, 2, 2)  # Occupe 2 lignes et 2 colonnes
center_layout.addWidget(QPushButton("Enregistrer"), 0, 2)
center_layout.addWidget(QPushButton("Annuler"), 1, 2)
main_layout.addLayout(center_layout)

# Ajouter une disposition horizontale en bas
bottom_layout = QHBoxLayout()
bottom_layout.addStretch()  # Ajouter un espace extensible
bottom_layout.addWidget(QPushButton("OK"))
bottom_layout.addWidget(QPushButton("Annuler"))
main_layout.addLayout(bottom_layout)

window.setLayout(main_layout)
window.show()

Fonctionnalités avancées des dispositions

1. Facteur d'étirement

Permet de contrôler la taille relative des contrôles dans la disposition.

Exemple

layout = QHBoxLayout()
layout.addWidget(QPushButton("Gauche"), stretch=1)  # Occupe 1 partie de l'espace
layout.addWidget(QPushButton("Centre"), stretch=2)  # Occupe 2 parties de l'espace
layout.addWidget(QPushButton("Droite"), stretch=1)  # Occupe 1 partie de l'espace

2. Contrôle de l'espacement

Exemple

layout.setSpacing(10)  # Espacement entre les contrôles
layout.setContentsMargins(20, 20, 20, 20)  # Marges sur les bords de la disposition

3. Alignement

Exemple

button = QPushButton("Bouton")
layout.addWidget(button, alignment=Qt.AlignRight)  # Aligné à droite

Bonnes pratiques

  1. Donnez la priorité à l'utilisation de gestionnaires de mise en page: évitez d'utiliser le positionnement absolu (setGeometry)
  2. Imbriquez raisonnablement les mises en page: combinez différentes mises en page pour créer des interfaces complexes
  3. Utilisez un espace extensible: faites en sorte que l'interface s'affiche correctement à différentes tailles
  4. Maintenez la cohérence: utilisez la même approche de mise en page pour des éléments d'interface similaires
  5. Testez différentes résolutions: assurez-vous que l'interface fonctionne correctement sur différentes tailles d'écran

En maîtrisant le système de gestion de mise en page de PyQt, vous pouvez créer des interfaces d'application GUI professionnelles, belles et hautement adaptables.

Autres extensions