next up previous contents
suivant: Les boîtes de boutons monter: Les conteneurs de bases précédent: Les conteneurs   Table des matières


Sous-sections

Les boîtes de regroupement

En créant une application, vous voudrez mettre plus d'un widget à l'intérieur d'un fenêtre. Notre premier exemple utilisait seulement un widget ainsi nous avons pu simplement utiliser un appel $window->add() pour placer le widget dans la fenêtre. Mais quand on place plus d'un widget dans la fenêtre, comment contrôlez-vous l'endroit où est placé le widget ? C'est là que les boîtes de regroupement interviennent.

Théorie des boîtes de regroupement

Le rangement est fait en créant des boîtes puis en regroupant les widgets à l'intérieur. Ces boîtes sont des conteneurs invisibles dans lesquelles on peut regrouper les widgets. Elles sont de deux formes : une boite horizontale et une boîte verticale. En rangeant les widgets dans une boîte horizontale, les objets sont insérés de la gauche vers la droite ou de la droite vers la gauche en fonction de l'appel utilisé. Pour une boîte verticale, le rangement se fait de bas en haut ou vice-versa. Vous pouvez utiliser des combinaisons en rangeant des boîtes à l'intérieur d'autres boîtes, ou à côté afin de produire l'effet désiré.

Pour créer une nouvelle boîte horizontale ou verticale :

Si $homogeneous est une valeur vraie alors tous les widgets rangés à l'intérieur disposeront du même espace. $spacing est la taille en pixels entre chaque ``marque'' disponible pour les widgets.

Les fonctions suivantes sont utilisées pour placer les objets dans les boîtes :

La fonction pack_start() commencera en haut d'une VBox et continuera vers le bas et range de la gauche vers la droite dans une HBox. pack_end() fera le contraire. Ces fonctions nous permettent juste de justifier à droite ou à gauche la position des widgets et peuvent être mélangées pour obtenir l'effet désiré. L'objet ajouté peut-être ou bien un conteneur ou bien un widget. En fait, de nombreux widgets sont eux-même des conteneurs ( les boutons par exemple, mais nous n'utilisons en général qu'un label ou un icône à l'intérieur des boutons ).

Comme vous l'avez peut-être deviné, l'argument $child est le widget à placer dans la boîte. Si l'argument $expand est une valeur vraie alors les widgets seront disposés dans la boîte pour remplir l'espace qui leurs est alloué. Déclarer $expand comme valeur fausse vous permettra de faire des justifications à droite et à gauche de vos widgets. Noter que déclarer $expand vraie pour une boîte revient à déclarer $expand vraie pour chaque widget.

Si l'argument $fill est une valeur vraie alors tout espace vide est alloué aux objets eux-même. Autrement l'espace vide est un emballage dans la boîte autour des objets. Cela a de l'effet uniquement si l'argument $expand est vrai.

En utilisant ces appels, GTK sait ou vous voulez placer vos widgets et peut ainsi redimensionner ou faire d'autres choses sympathiques. Comme vous l'imaginez, cette méthode nous donne une certaine flexibilité quand on crée et place des widgets.

Détails sur les boîtes

En raison de cette flexibilité, le rangement dans les boîtes peut être déroutant au début. Il y a beaucoup d'options et il n'est pas immédiatement évident de les arranger entre elles. En fait, il y a cinq styles de base différents. Ces cinq styles sont illustrés ci-dessous.

Commentaire à propos de l'exemple

Chaque ligne de l'exemple contient une boîte horizontale avec plusieurs boutons. L'appel pour ranger est un raccourci pour regrouper chaque bouton dans une boîte. Chaque bouton est placé dans la boîte de la même manière ( les arguments sont passées à la fonction pack_start() ). C'est une forme raccourcie de pack_start() et de pack_end() qui déclare $expand vraie, $fill vraie et $padding 0.

Ces fonctions sont :

La valeur homogeneous de la boîte peut être allumée ou éteinte en utilisant la fonction :

De même pour la valeur spacing :

Si vous voulez déplacer un enfant, utilisez :

$child est le widget à déplacer et $position est la position à changer en partant de 0. Si vous voulez connaître l'ordre actuel, regardez la liste fournie par l'appel à la fonction sur les conteneurs children().

Si vous voulez changer un regroupement d'enfants, vous pouvez utiliser :

Les arguments sont les mêmes que pour les fonctions pack_start() et pack_end() à l'exception de $pack_type qui est soit 'start' soit 'end'.

Quelle est la différence entre l'espace ( spacing ), déclaré quand la boîte est créée, et l'emballage ( padding ), déclaré quand les éléments sont rangés ? L'espace est ajouté entre les objets et l'emballage est ajouté de chaque côté de l'objet.

Exemple

Voici le code utilisé pour créer la fenêtre illustrée ci-dessous. Je l'ai abondamment commenté ainsi j'espère que vous n'aurez aucun problème à le comprendre, mais soyez conscient qu'il est assez long. Faîtes le tourner par vous-même et jouer avec.

Box Packing Example


next up previous contents
suivant: Les boîtes de boutons monter: Les conteneurs de bases précédent: Les conteneurs   Table des matières
LE BORGNE Patrice 2001-01-11