Les box

  1. Introduction
  2. Création d’une box (boite)

1. Introduction

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 :

  • GtkHBox qui permet de placer les widgets horizontalement.
  • GtkVBox qui permet de placer les widgets verticalement.
GtkBox hérite de son parent GtkContainer et des ancêtres de GtkContainer.

2. Création d’une box (boite)

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 :

  • Le paramètre homogeneous définit si tous les widgets existant sur la boite utilisent un espace équivalent. On met true si c’est le cas ou false si ce n’est pas le cas.
  • Le paramètre spacing définit la taille (en pixel) entre les widgets.

Maintenant il ne reste qu’à insérer les widgets dans la fenêtre. Voici les syntaxes couramment utilisés :

  • Pour insérer un widget en haut :
    void gtk_box_pack_start(GtkBox* box, GtkWidget* child, gboolean expand, gboolean fill, guint padding);
  • Pour insérer un widget en bas :
    void gtk_box_pack_end(GtkBox* box, GtkWidget* child, gboolean expand, gboolean fill, guint padding);

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.
Les box, cours langage C, gtk+

Voici le code source :



Une question? Cliquez ici pour la poser.

Retour sur le portail du langage C/C++