PyQt - Gestion de la mise en page

Un widget GUI peut être placé à l'intérieur de la fenêtre du conteneur en spécifiant ses coordonnées absolues mesurées en pixels. Les coordonnées sont relatives aux dimensions de la fenêtre définies par la méthode setGeometry ().

Syntaxe setGeometry ()

QWidget.setGeometry(xpos, ypos, width, height)

Dans l'extrait de code suivant, la fenêtre de niveau supérieur de 300 x 200 pixels de dimensions est affichée à la position (10, 10) sur le moniteur.

import sys
from PyQt4 import QtGui

def window():
   app = QtGui.QApplication(sys.argv)
   w = QtGui.QWidget()
	
   b = QtGui.QPushButton(w)
   b.setText("Hello World!")
   b.move(50,20)
	
   w.setGeometry(10,10,300,200)
   w.setWindowTitle(“PyQt”)
   w.show()
   sys.exit(app.exec_())
	
if __name__ == '__main__':
   window()

UNE PushButton widget est ajouté dans la fenêtre et placé à une position de 50 pixels vers la droite et 20 pixels sous la position supérieure gauche de la fenêtre.

Ce Absolute Positioning, cependant, ne convient pas pour les raisons suivantes -

  • La position du widget ne change pas même si la fenêtre est redimensionnée.

  • L'apparence peut ne pas être uniforme sur différents périphériques d'affichage avec des résolutions différentes.

  • La modification de la mise en page est difficile car elle peut nécessiter une refonte de l'ensemble du formulaire.

L'API PyQt fournit des classes de mise en page pour une gestion plus élégante du positionnement des widgets à l'intérieur du conteneur. Les avantages des gestionnaires de mise en page par rapport au positionnement absolu sont:

  • Les widgets à l'intérieur de la fenêtre sont automatiquement redimensionnés.

  • Assure une apparence uniforme sur les périphériques d'affichage avec différentes résolutions.

  • L'ajout ou la suppression de widgets de manière dynamique est possible sans avoir à reconcevoir.

Voici la liste des classes dont nous parlerons une par une dans ce chapitre.

N ° Sr. Classes et description
1 QBoxLayout

La classe QBoxLayout aligne les widgets verticalement ou horizontalement. Ses classes dérivées sont QVBoxLayout (pour organiser les widgets verticalement) et QHBoxLayout (pour organiser les widgets horizontalement).

2 QGridLayout

Un objet de classe GridLayout présente une grille de cellules disposées en lignes et en colonnes. La classe contient la méthode addWidget (). Tout widget peut être ajouté en spécifiant le nombre de lignes et de colonnes de la cellule.

3 QFormLayout

QFormLayout est un moyen pratique de créer un formulaire à deux colonnes, où chaque ligne se compose d'un champ d'entrée associé à une étiquette. Par convention, la colonne de gauche contient le libellé et la colonne de droite contient un champ de saisie.