Welcome! Anonymous


[COURS] [GTK] Ajouter des éléments à une fenêtre

Tout concernant le langage C et C++

[COURS] [GTK] Ajouter des éléments à une fenêtre

Messagede alton » Mer 29 Avr 2009 08:58

C'est bien beau tout ça mais une fenêtre vide, ça sert à quoi?

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. :confused:
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(&amp;argc, &amp;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] ;)
Ceux qui disent que c'est compliqué de se mettre à linux n'ont jamais essayé de comprendre une fille.
Avatar de l’utilisateur
alton
Co-administrateur
Co-administrateur
 
Messages: 654
Inscription: Ven 1 Fév 2008 11:57
Tchup`s - points: 180.00

Publicité

Messagede Tchupa » Mer 29 Avr 2009 11:01

Vous êtes au taquet en ce momemt.
Hein ! monsieur taquet :impressive:
:throb: ღ ♥Kornette | Blog de Tchupa Corporate

Avatar de l’utilisateur
Tchupa
Fondateur
Fondateur
 
Messages: 3826
Inscription: Dim 25 Déc 2005 18:27
Tchup`s - points: 830.00
Localisation: In My Mind

Messagede alton » Mer 29 Avr 2009 11:06

[color="DarkGreen"]non, pitié, m'appelle plus comme ça, Mouss m'a traumatisé [/color] :(
Ceux qui disent que c'est compliqué de se mettre à linux n'ont jamais essayé de comprendre une fille.
Avatar de l’utilisateur
alton
Co-administrateur
Co-administrateur
 
Messages: 654
Inscription: Ven 1 Fév 2008 11:57
Tchup`s - points: 180.00

Messagede Tchupa » Mer 29 Avr 2009 13:05

En tout cas je t'ai créditer des xp toi et totocam pour vos bon tutos continué comme ça !:great:
:throb: ღ ♥Kornette | Blog de Tchupa Corporate

Avatar de l’utilisateur
Tchupa
Fondateur
Fondateur
 
Messages: 3826
Inscription: Dim 25 Déc 2005 18:27
Tchup`s - points: 830.00
Localisation: In My Mind

Messagede alton » Mer 29 Avr 2009 13:23

[color="DarkGreen"]Merci patron, d'ailleurs, j'ai déjà prévu de faire une suite[/color]
Ceux qui disent que c'est compliqué de se mettre à linux n'ont jamais essayé de comprendre une fille.
Avatar de l’utilisateur
alton
Co-administrateur
Co-administrateur
 
Messages: 654
Inscription: Ven 1 Fév 2008 11:57
Tchup`s - points: 180.00

Messagede Tchupa » Mer 29 Avr 2009 13:48

Je m'en doutais :D
:throb: ღ ♥Kornette | Blog de Tchupa Corporate

Avatar de l’utilisateur
Tchupa
Fondateur
Fondateur
 
Messages: 3826
Inscription: Dim 25 Déc 2005 18:27
Tchup`s - points: 830.00
Localisation: In My Mind

Messagede totocam » Mer 29 Avr 2009 14:25

Merci et pareillement, je viens d'ailleurs d'en créer un nouveau
Avatar de l’utilisateur
totocam
Co-administrateur
Co-administrateur
 
Messages: 169
Inscription: Jeu 31 Jan 2008 13:11
Tchup`s - points: 80.00
Localisation: AUSSONNE


Retourner vers Langage C et C++

Qui est en ligne

Utilisateurs parcourant ce forum: Aucun utilisateur enregistré et 1 invité