Blog ENI : Toute la veille numérique !
Accès illimité 24h/24 à tous nos livres & vidéos ! 
Découvrez la Bibliothèque Numérique ENI. Cliquez ici
💥 Les 22 & 23 novembre : Accès 100% GRATUIT
à la Bibliothèque Numérique ENI. Je m'inscris !
  1. Livres et vidéos
  2. PyQt5
  3. La disposition en PyQt
Extrait - PyQt5 Développez vos interfaces graphiques en Python
Extraits du livre
PyQt5 Développez vos interfaces graphiques en Python
4 avis
Revenir à la page d'achat du livre

La disposition en PyQt

Introduction

Le chapitre Inventaires des widgets PyQt nous a permis d’inventorier les principaux contrôles (pour rappel ceux-ci sont nommés « widgets ») dans un contexte PyQt. Dans cet inventaire, nous avons vu que la disposition sur la fenêtre se faisait sans mode opératoire particulier. Jusqu’à maintenant, on place nos widgets à un point de coordonnées donné, en indiquant en général les coordonnées du coin gauche du widget manipulé.

Cette approche a ses limites et est sous certains aspects peu pratique. C’est pour cela que des widgets de disposition (layout widgets) existent en PyQt pour permettre d’agencer facilement les fenêtres développées. Ce type de contrôle dédié à l’organisation et à la structuration visuelle d’une fenêtre va constituer l’essentiel du contenu de ce chapitre.

Inventaire des widgets de disposition en PyQt

1. QHBoxLayout et QVBoxLayout

a. Introduction

Les deux premiers widgets de disposition que nous allons étudier sont QHBoxLayout et QVBoxLayout. Ils sont traités conjointement, car d’une part ils dérivent de la même classe QBoxLayout et d’autre part ils obéissent tous deux à la même logique de disposition. Cette logique de disposition est horizontale pour QHBoxLayout et verticale pour QVBoxLayout.

Les documentations en ligne des classes QBoxLayout, QHBoxLayout, QVBoxLayout sont respectivement aux adresses suivantes :

https://doc.qt.io/qt-5/qboxlayout.html

https://doc.qt.io/qt-5/qhboxlayout.html

https://doc.qt.io/qt-5/qvboxlayout.html

b. Premier exemple avec QVBoxLayout

Commençons par déclarer les classes dont nous allons avoir besoin.

from PyQt5.QtWidgets import QApplication, QWidget, QPushButton,  
QVBoxLayout 

Créons une application et une fenêtre.

app = Qapplication([]) 
fenetre = QWidget() 

Nous pouvons alors créer un objet de disposition verticale, c’est-à-dire que les widgets seront ajoutés les uns après les autres et selon une orientation verticale.

disposition = QVBoxLayout() 

En l’occurrence, on ajoute cinq boutons qui seront ainsi alignés les uns après les autres, verticalement.

disposition.addWidget(QPushButton('Premier')) 
disposition.addWidget(QPushButton('Second')) 
disposition.addWidget(QPushButton('Troisième')) 
disposition.addWidget(QPushButton('Quatrième')) 
disposition.addWidget(QPushButton('Cinquième')) 

Puis on associe notre objet de disposition à notre fenêtre grâce à la fonction QVBoxLayout.

fenetre.setLayout(disposition) 

Enfin, on affiche la fenêtre. À aucun moment la disposition n’a nécessité l’utilisation de coordonnées relatives pour chacun des widgets mis en place.

fenetre.show() 

Le code global est le suivant :

from PyQt5.QtWidgets import QApplication, QWidget, QPushButton,  
QVBoxLayout 
 
app = Qapplication([]) 
fenetre = QWidget() 
 
disposition = QVBoxLayout() 
disposition.addWidget(QPushButton('Premier')) 
disposition.addWidget(QPushButton('Second')) 
disposition.addWidget(QPushButton('Troisième')) ...