Outils pour utilisateurs

Outils du site


dev:python:pygtk:agencement-widgets

Ceci est une ancienne révision du document !


Agencer les widgets

Pour organiser les différents composants de l'interface graphique (widgets) PyGTK propose un système de boites (box) qui sont des conteneurs invisibles à l’intérieur desquels on insère les widgets. Il existe deux familles: les conteneurs verticaux et les horizontaux. Dans un conteneur horizontal, les objets insérés sont placés les un à la suite des autres en file indienne. Dans un conteneur vertical, les objets seront disposés verticalement les uns sous les autres. Les boites s'imbriquent à volonté afin de produire l'effet désiré.

En travaillant avec les conteneurs, l'apparence d'un widget en taille et proportion peut sensiblement différer de ce à qu'on souhaiterai obtenir. C'est une conséquence du fonctionnent interne du système de boites proposé par GTK+. La taille d'un widget va dépendre de la façon dont il est regroupé avec les autres widget mais également de la façon dont son propre conteneur l'autorise ou non à s’étendre ou occuper l'espace disponible.

L'espace que chacun occupera est déterminée par:

  • Les tailles requises ou par défaut de chaque widget qui dépendent normalement de leur contenu (en particuliers les labels).
  • La valeur des attributs expand et fill fournis lors de l'insertion du widget dans le conteneur.
expand= True Le widget aura la possibilité de consommer l'espace disponible
expand= False Le widget ne consommera pas plus d'espace que necessaire
fill= True Si plus d'espace est disponible, l'occuper avec mon contenu
fill= False Laisser vide l'espace disponible

Ces comportements peuvent paraître assez complexes à appréhender au départ mais ils sont indispensables lorsqu'on souhaite utiliser correctement toutes les fonctionnalités de redimensionnement des fenêtres de l'interface.

Références

  • PyGTK 2.0 Tutorial, chapitre 4
dev/python/pygtk/agencement-widgets.1439394045.txt.gz · Dernière modification : 2021/02/01 21:51 (modification externe)