réponse : à rien ... alors on va lui ajouter des éléments
Seulement voilà, un widget de type GtkContainer (comme notre fenêtre précédente) ne peut contenir qu'un seul widget.
La solution à ce problème est l'utilisation des widgets de type GtkBox qui permettent d'inclure plusieurs widgets à l'intérieur.
Il existe deux types de GtkBox :
* les GtkHBox qui permettent de disposer les widgets horizontalement
* les GtkVBox pour les disposer verticalement.
- Code: Tout sélectionner
#include <stdlib.h>
#include <gtk/gtk.h>
int main(int argc, char **argv)
{
GtkWidget * maFenetre = NULL;
[color="Blue"]// nous allons donc créer deux boites[/color]
GtkWidget * box = NULL;
GtkWidget * box2 = NULL;
[color="Blue"]// deux labels [/color]
GtkWidget * label = NULL;
GtkWidget * label2 = NULL;
[color="Blue"]// un champs texte[/color]
GtkWidget * champTexte = NULL;
[color="Blue"]// et un bouton[/color]
GtkWidget * bouton = NULL;
[color="Blue"]// on initialise toujours Gtk et on crée notre fenêtre principale[/color]
gtk_init(&argc, &argv);
maFenetre = gtk_window_new(GTK_WINDOW_TOPLEVEL);
gtk_window_set_default_size(GTK_WINDOW(maFenetre), 600, 300);
gtk_window_set_title(GTK_WINDOW(maFenetre), "Cool, une fenêtre ... et avec des trucs dedans cette fois :)");
[color="Blue"] // on définit nos boites, la première sera une GtkVBox ( éléments alignés verticalement )
// et la seconde sera un GtkHBox ( éléments alignés horizontalement )[/color]
box = gtk_vbox_new(FALSE, 2);
box2 = gtk_hbox_new(TRUE , 2);
[color="Blue"]// on ajoute notre boite dans la fenêtre principale[/color]
gtk_container_add( GTK_CONTAINER(maFenetre) , box);
[color="Blue"]// on initialise notre premier labels avec la fonction GtkWidget * gtk_label_new ( gchar * texte )[/color]
label = gtk_label_new("on peut même mettre du texte");
[color="Blue"] // petit point particulier avec ce label ci,
// nous allons mettre notre texte en forme ( pour ceux qui connaissent le HTML, ça ressemble assez
// mais avec tout de même quelques différences )
// ici, nous allons écrire notre texte en bleu grâce à l'attribut foreground de la balise <span> et
// nous allons également mettre une partie en gras, grâce à la balise <b>[/color]
label2 = gtk_label_new(NULL);
gtk_label_set_markup(GTK_LABEL(label2) , "<span foreground=\"#0000FF\">et encore du texte<b> mais formaté</b></span>");
[color="Blue"] // on va aussi créer un champs texte et on va initialiser son contenu
// grâce à GtkWidget * gtk_entry_new() et void gtk_entry_set_text (gchar* text)[/color]
champTexte = gtk_entry_new();
gtk_entry_set_text(GTK_ENTRY( champTexte) , "un petit champ texte");
[color="Blue"] // et pour finir, on crée un bouton avec GtkWidget * gtk_button_new_with_label( gchar* text )[/color]
bouton = gtk_button_new_with_label("et pour finir,un joli bouton");
[color="Blue"] // nous allons maintenant ajouter ces éléments dans nos boites. Pour ce faire, il existe 2 fonctions:
// void gtk_box_pack_start(GtkBox* box, GtkWidget* child, gboolean expand, gboolean fill, guint padding);
// void gtk_box_pack_end(GtkBox* box, GtkWidget* child, gboolean expand, gboolean fill, guint padding);
// gtk_box_pack_start , on ajoute les éléments en partant du haut (pour les GtkVBox) ou de la gauche ( pour les GtkHBox)
// et avec gtk_box_pack_end, on fait l'inverse, tout simplement[/color]
gtk_box_pack_start(GTK_BOX(box), label , FALSE , FALSE,5);
gtk_box_pack_start(GTK_BOX(box) , label2 , FALSE , FALSE , 5);
gtk_box_pack_start(GTK_BOX(box) , box2 , FALSE, FALSE,5); // on peut très bien inclure un GtkBox dans un autre GtkBox
gtk_box_pack_start(GTK_BOX(box2) , champTexte , FALSE,TRUE , 5);
gtk_box_pack_start(GTK_BOX(box2) , bouton , FALSE,FALSE,5);
[color="Blue"] // maintenant nous allons rendre tout visible
// cette fois si, nous allons utiliser void gtk_widget_show_all(GtkWidget*) ,
// sinon les éléments contenus dans la fenêtre ne seront pas affichés[/color]
gtk_widget_show_all(maFenetre);
g_signal_connect(G_OBJECT(maFenetre), "delete-event", G_CALLBACK(gtk_main_quit), NULL);
gtk_main();
return EXIT_SUCCESS;
}
[color="DarkGreen"]Voilà pour la seconde partie de mon tuto sur Gtk,
Et comme toujours, si vous avez des remarques ou des questions, n'hésitez pas[/color]




ღ ♥Kornette | 


News