Sunteți pe pagina 1din 5

Cours GTK 2 http://gtk.developpez.com/cours/gtk2/?

page=page_6

Forums Tutoriels Magazine FAQs Blogs Chat Newsletter tudes Emploi Club
Contacts
p
u
Newsletter Developpez.com b
l
i
Inscrivez-vous gratuitement au Club pour recevoir c
i
t
la newsletter hebdomadaire des dveloppeurs et IT pro

Accueil ALM Java .NET Dv. Web EDI Programmation SGBD Office Solutions d'entreprise Applications Mobiles Systmes

Accueil C Forums C FAQ C Tutoriels C Livres C Compilateurs et outils C Sources C Bibliothques C GTK+

ACCUEIL GTK+ FORUM GTK+ FAQ GTK+ TUTORIELS GTK+ SOURCES GTK+ BIBLIOTHEQUES LIVRES GTK+ OUTILS GTK+

Cours GTK 2

Table des matires

VI. Les box


VI-A. Utilisation des GtkBox
VI-A-1. Cration
VI-A-2. Insertion d'un
widget
VI-A-3. Exemple
VI-A-4. Programme
exemple
VI-B. En savoir plus
VI-B-1. Fonctions
documentes
VI-B-2. Fonctions non
documentes

VI. Les box


Vous avez srement d essayer de mettre plusieurs widgets dans une fentre mais
sans succs. Cela est d au fait qu'un widget de type GtkContainer ne peut contenir
qu'un seul widget. La solution ce problme est l'utilisation des widgets de type
GtkBox qui permettent d'inclure plusieurs widgets l'intrieur.

Il existe deux catgories de GtkBox :

Les GtkHBox qui permettent de disposer les widgets horizontalement ;


Les GtkVBox pour les disposer verticalement.

VI-A. Utilisation des GtkBox

VI-A-1. Cration

Comme toujours, la cration de ces widgets est trs simple. Les fonctions suivantes
permettent de crer respectivement une GtkHBox et une GtkVBox :

Slectionnez
GtkWidget* gtk_hbox_new(gboolean homogeneous, gint spacing);
GtkWidget* gtk_vbox_new(gboolean homogeneous, gint spacing);

Le paramtre homogeneous dfinit si tous les widgets contenus dans la GtkBox


utilisent un espace quivalent. C'est--dire que si ce paramtre est TRUE, la zone
d'affichage de la GtkBox sera divise en x zone(s) de taille gale (x tant le nombre
de widgets contenus).

Le paramtre spacing permet de dfinir l'espacement entre chacun des widgets


contenus.

VI-A-2. Insertion d'un widget

Les widgets GtkHBox et GtkVBox n'ont pas de fonctions spcifiques pour l'ajout de
widget. Il faut, pour cela, utiliser les fonctions de GtkBox dont drivent les diffrents
types de box. Les fonctions les plus couramment utilises sont :

Slectionnez
void gtk_box_pack_start(GtkBox* box, GtkWidget* child, gboolean expand, gboolean fill, guint pa

1 sur 5 05/08/2015 05:21


Cours GTK 2 http://gtk.developpez.com/cours/gtk2/?page=page_6

void gtk_box_pack_end(GtkBox* box, GtkWidget* child, gboolean expand, gboolean fill, guint padd

La premire fonction insre les widgets de haut en bas (pour les GtkVBox) ou de
gauche droite (pour les GtkHBox). La seconde fonction fait exactement le contraire,
c'est--dire, de bas en haut pour les GtkVBox et de droite gauche pour les
GtkHBox.

Le paramtre box est bien entendu la GtkBox dans laquelle on veut insrer le widget
child (2me paramtre).

Le paramtre expand n'est utile que si la GtkBox en question n'est pas dfini comme
homogne (homogeneous=FALSE lors de la cration). Dans ce cas, tous les widgets
qui auront t insrs avec la valeur expand=TRUE se partageront tout l'espace libre
de la GtkBox (les widgets avec expand=FALSE n'utiliseront que l'espace qui leur est
ncessaire).

Le paramtre fill permet de dfinir si le widget enfant occupe toute la zone qui lui est
rserve.

Et enfin, le paramtre padding permet d'ajouter de l'espace autour du widget (en


plus de celui dfini par le paramtre spacing lors de la cration de la GtkBox).

Pour vous montrer les effets des diffrents paramtres voici un tableau avec des
captures d'cran avec diffrentes configurations :

Paramtres Captures

GtkVBox :
homogeneous = TRUE
Bouton 1 :
fill = FALSE
Bouton 2 :
fill = FALSE

GtkVBox :
homogeneous = TRUE
Bouton 1 :
fill = FALSE
Bouton 2 :
fill = TRUE

GtkVBox :
homogeneous = FALSE
Bouton 1 :
Expand = FALSE
Bouton 2 :
expand = FALSE

GtkVBox :
homogeneous = FALSE
Bouton 1 :
expand = FALSE
Bouton 2 :
expand = TRUE
fill = FALSE

2 sur 5 05/08/2015 05:21


Cours GTK 2 http://gtk.developpez.com/cours/gtk2/?page=page_6

GtkVBox :
homogeneous = FALSE
Bouton 1 :
expand = FALSE
Bouton 2 :
expand = TRUE
fill = TRUE

VI-A-3. Exemple

Pour montrer les possibilits qu'offrent les GtkBox, nous allons crer une fentre
contenant quatre boutons organiss comme cela :

Maintenant, la question est de savoir comment organiser les diffrentes GtkBox pour
avoir ce rsultat. C'est trs simple, nous avons besoin de deux GtkBox, la premire
verticale, la deuxime horizontale. Voici une image qui vous explique comment nous
devons organiser nos deux GtkBox :

Ici, en rouge c'est la GtkVBox qui est directement ajout la fentre principale. On
va y empiler les widgets de haut en bas avec la fonction gtk_box_pack_start. On va
tout d'abord placer le Bouton 1 , ensuite pour pouvoir ajouter les autres boutons
de gauche droite, il faut ajouter la GtkHBox (en bleu) car on ne peut pas le faire
avec la GtkVBox puisqu'elle est verticale. On ajoute donc ensuite Bouton 2 et
Bouton 3 dans la GtkHBox, et pour finir, on ajoute Bouton 4 dans la GtkVBox.

Voil, une fois que l'on a compris comment organiser les choses, on peut tout faire.

VI-A-4. Programme exemple

Slectionnez
#include <stdlib.h>
#include <gtk/gtk.h>

int main(int argc, char **argv)


{
GtkWidget *pWindow;
GtkWidget *pVBox;
GtkWidget *pHBox;
GtkWidget *pButton[4];

gtk_init(&argc,&argv);

pWindow = gtk_window_new(GTK_WINDOW_TOPLEVEL);
gtk_window_set_title(GTK_WINDOW(pWindow), "Les GtkBox");
gtk_window_set_default_size(GTK_WINDOW(pWindow), 320, 200);
g_signal_connect(G_OBJECT(pWindow), "destroy", G_CALLBACK(gtk_main_quit), NULL);

/* Cration de la GtkBox verticale */


pVBox = gtk_vbox_new(TRUE, 0);
/* Ajout de la GtkVBox dans la fenetre */

3 sur 5 05/08/2015 05:21


Cours GTK 2 http://gtk.developpez.com/cours/gtk2/?page=page_6

gtk_container_add(GTK_CONTAINER(pWindow), pVBox);

/* Creation des boutons */


pButton[0] = gtk_button_new_with_label("Bouton 1");
pButton[1] = gtk_button_new_with_label("Bouton 2");
pButton[2] = gtk_button_new_with_label("Bouton 3");
pButton[3] = gtk_button_new_with_label("Bouton 4");

/* Ajout de Bouton 1 dans la GtkVBox */


gtk_box_pack_start(GTK_BOX(pVBox), pButton[0], TRUE, FALSE, 0);

/* Cration de la box horizontale */


pHBox = gtk_hbox_new(TRUE, 0);

/* Ajout de la GtkHBox dans la GtkVBox */


gtk_box_pack_start(GTK_BOX(pVBox), pHBox, TRUE, TRUE, 0);

/* Ajout des boutons 2 et 3 dans la GtkHBox */


gtk_box_pack_start(GTK_BOX(pHBox), pButton[1], TRUE, TRUE, 0);
gtk_box_pack_start(GTK_BOX(pHBox), pButton[2], TRUE, FALSE, 0);

/* Ajout du dernier bouton dans la GtkVBox */


gtk_box_pack_start(GTK_BOX(pVBox), pButton[3], TRUE, TRUE, 0);

gtk_widget_show_all(pWindow);

gtk_main();

return EXIT_SUCCESS;
}

Rsultat :

VI-B. En savoir plus

VI-B-1. Fonctions documentes

Slectionnez
gboolean gtk_box_get_homogeneous(GtkBox *box);

Utilise pour savoir si une GtkBox est homogne.

Entre(s) :

box : la GtkBox.

Sortie : TRUE si box est homogne, FALSE sinon.

Slectionnez
void gtk_box_set_homogeneous(GtkBox *box, gboolean homogeneous);

Utilise pour dfinir si une GtkBox est homogne ou pas.

Entre(s) :

box : la GtkBox.
homogeneous : TRUE si l'on veut que box soit homogne, FALSE sinon.

Sortie : rien.

Slectionnez
gint gtk_box_get_spacing(GtkBox *box);

Utilise pour connatre l'espace entre les widgets d'une GtkBox.

Entre(s) :

box : la GtkBox.

Sortie : gint.

Slectionnez

4 sur 5 05/08/2015 05:21


Cours GTK 2 http://gtk.developpez.com/cours/gtk2/?page=page_6

void gtk_box_set_spacing(GtkBox *box, gint spacing);

Utilise pour dfinir l'espacement entre les widgets.

Entre(s) :

box : la GtkBox.
spacing : espace entre les widgets.

Sortie : rien.

VI-B-2. Fonctions non documentes

Slectionnez
void gtk_box_pack_start_defaults(GtkBox *box, GtkWidget *widget);
void gtk_box_pack_end_defaults(GtkBox *box, GtkWidget *widget);
void gtk_box_reorder_child(GtkBox *box, GtkWidget *child, gint position);
void gtk_box_query_child_packing(GtkBox *box, GtkWidget *child, gboolean *expand, gboolean
void gtk_box_set_child_packing(GtkBox *box, GtkWidget *child, gboolean expand, gboolean fill, g

Les sources prsentes sur cette page sont libres de droits et vous pouvez les utiliser votre
convenance. Par contre, la page de prsentation constitue une uvre intellectuelle protge
par les droits d'auteur. Copyright 2013 developpez. Aucune reproduction, mme partielle,
ne peut tre faite de ce site et de l'ensemble de son contenu : textes, documents, images,
etc. sans l'autorisation expresse de l'auteur. Sinon vous encourez selon la loi jusqu' trois ans
de prison et jusqu' 300 000 de dommages et intrts.

Responsable bnvole de la rubrique GTK+ : Francis Walter - Contacter par email

Nous contacter Participez Hbergement Informations lgales Partenaire : Hbergement Web


Copyright 2000-2015 - www.developpez.com

5 sur 5 05/08/2015 05:21

S-ar putea să vă placă și