Ceci est une ancienne révision du document !
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 à que l'on souhaitait 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:
| 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 | Le widget rempli de son contenu l'espace supplémentaire |
| fill= False | l'espace supplémentaire est utilise comme marge |
Ci-dessous un exemple de signature avec la méthode pack_start() disponible sur les conteneurs:
box.pack_start(child, expand=True, fill=True, padding=0)
child est l'objet que l'on souhaite insérer dans le conteneur. L'argument expand permet de contrôler l’expansion du conteneur. Si expand=False, le widget placé dans le conteneur occupera seulement l'espace nécessaire. Si expand=True, l'espace supplémentaire est utilisé par le conteneur se développe pour occuper tout l'espace disponible. L'argument fill permet de définir si l'espace supplémentaire est disponible pour les widgets eux-même (fill=True) ou pour l’écartement des objets entre-eux (fill=False). Il aura un effet seulement si l'argument expand=True
Dans les exemples ci-dessous, en mode interactif on crée une fenêtre puis un conteneur horizontal à l’intérieur duquel 4 boutons sont placés. On fait varier les valeurs des arguments expand, fill et padding.
box.pack_start(bt1, False, False) box.pack_end(bt2, False, False) box.pack_start(bt3, False, False) box.pack_start(bt4, False, False) | |
box.pack_start(bt1, True, False) box.pack_end(bt2, True, False) | pygtk |
box = gtk.HBox(homogeneous=False, spacing=0)
L'argument spacing donné à la création du conteneur est différent de l'argument padding spécifié lors de l'insertion de l'objet dans le conteneur (packing). la valeur spacing est ajoutée entre les objets
box= gtk.HBox(homogeneous=False, spacing=20) box.pack_start(boutons[0], expand=False, fill=False, padding=0) box.pack_start(boutons[1], expand=False, fill=False, padding=0)
Dans cet exemple on définit un espace de 20 pixels entre chaque objets dans le conteneur. Lors du packing des boutons on spécifie que ceux-ci n'occuperont pas l'espace supplémentaire disponible expand=False. Le résultat ci-dessous:
Le padding ou rembourrage est une marge présente de chaque coté du widget.
box = gtk.HBox(homogeneous=False,spacing=0) box.pack_start(boutons[0],padding=20) box.pack_start(boutons[1],padding=10)
Ici, pour le bouton 0, une marge a été définie a 20 pixel de chaque coté. Les arguments expand et fill de la méthode pack_start() n'ont pas été précisés. Ils prennent donc leur valeur par défaut (True). Le bouton rempliera l'espace supplémentaire disponible. De même pour le second bouton mais la marge a été fixée à 10. Ci-dessous le résultat obtenu: