Si vous avez essayé d’écrire plusieurs widgets dans une fenêtre, vous avez certainement reçu ce type de message
d’erreur : “ Gtk-WARNING **: Attempting to add a widget with type nom-du-widget to a GtkWindow, but as a GtkBin
subclass a GtkWindow can only contain one widget at a time; it already contains a widget of type nom-du-widget” .
Comme vous venez de voir, ce message d’erreur indique que GtkWindow ne peut pas contenir qu’un seul widget. Le problème
est qu’un widget de type GtkContainer ne peut pas contenir qu’un seul widget. Pour résoudre ce problème, nous
allons placer des boites dans la fenêtre. Chaque boite (box) aura le droit d’avoir des widgets. Comme ça, nous
pouvons insérer du texte, des boutons, des images (…) dans une fenêtre.
Pour créer une boite, on utilise un widget de type GtkBox. Il y a deux types de wigdet GtkBox :
Pour créer une boite, on doit commencer par déclarer un pointeur vers GtkWidget. Dans notre cas, ça sera :
Ensuite, on passe à l’initialisation. Voici les syntaxes respectives pour une GtkHBox et une
GtkVBox :
GtkWidget* gtk_hbox_new(gboolean homogeneous, gint spacing);
GtkWidget* gtk_vbox_new(gboolean homogeneous, gint spacing);
Dans notre cas, ça sera :
Si vous vous demandez pourquoi le true et le 0, voici l’explication :
Maintenant il ne reste qu’à insérer les widgets dans la fenêtre.
Voici les syntaxes couramment utilisés :
Ici box définit la boite, child définit le widget à insérer dans la boite, expand définit l’espace du child, fill definit si child occupe tout l’espace qui lui est réservé ou pas et enfin padding qui ajoute de l’espace autour de child.
La théorie, c’est bien. Maintenant passons à la pratique. Nous allons revenir sur notre ancienne fenêtre et ajouter un bouton qui nous permet de quitter la fenêtre.
Voici une capture de notre fenêtre.Voici le code source :