Vous êtes sur la page 1sur 5

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

page=page_5

Forums Tutoriels Magazine FAQs Blogs Chat Newsletter tudes Emploi Club
Contacts
p
u
Developpez.com b
l
i
Tlcharger gratuitement le magazine des dveloppeurs, le bimestriel c
i
t
des dveloppeurs avec une slection des meilleurs tutoriels

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

V. Les boutons (partie 1)


V-A. Cration et affichage d'un
bouton
V-A-1. Crer un bouton
avec du texte
V-A-2. Quitter l'application
en cliquant sur le bouton
V-A-3. Affichage dans une
fentre
V-A-4. Programme
exemple
V-B. En savoir plus
V-B-1. Signaux
V-B-2. Fonctions
documentes

V. Les boutons (partie 1)


Nous allons cette fois nous intresser un lment essentiel d'une interface graphique : le
bouton. En effet celui-ci permet l'utilisateur d'effectuer une action grce un simple clic de
souris. GTK+ nous permet de les utiliser grce au widget GtkButton :

V-A. Cration et affichage d'un bouton

Dans ce chapitre, notre objectif sera de crer une application contenant un bouton qui permettra
de quitter l'application.

V-A-1. Crer un bouton avec du texte

Dans un premier temps, nous allons dclarer un pointeur vers une structure GtkWidget afin de
pouvoir ensuite crer le bouton.

Slectionnez
GtkWidget *pQuitBtn;

Ensuite, il faut initialiser le bouton. Pour cela, GTK+ permet l'utilisation de quatre fonctions
diffrentes :

Slectionnez
GtkWidget* gtk_button_new(void);
GtkWidget* gtk_button_new_with_label(const gchar *label);
GtkWidget* gtk_button_new_with_mnemonic(const gchar *label);
GtkWidget* gtk_button_new_from_stock(const gchar *stock_id);

La premire fonction permet de crer un bouton vide. Cela permet de personnaliser


compltement le bouton car GtkButton drive de GtkContainer. On peut donc inclure n'importe
quel type de widget dans le bouton (label, image).

La deuxime fonction s'occupe en plus d'insrer un label l'intrieur du bouton. Le paramtre


label correspond au texte afficher. Comme pour le widget GtkLabel, si un caractre accentu
est utilis, il faudra appeler la fonction g_locale_to_utf8 pour avoir un affichage correct du texte
(voir IV. Les labels pour plus de prcision).

La troisime fonction ajoute cela une nouvelle fonctionnalit. Elle permet, en plus d'afficher un
label, de faire ragir le bouton l'aide d'un raccourci clavier. La touche servant de raccourci est
spcifie dans le paramtre label. Il suffit de mettre _ devant la lettre souhaite pour que la
combinaison Atl+Touche active le bouton. Par exemple pour l'application de ce chapitre, le texte
afficher sera Quitter et si nous voulons que la combinaison de touches Atl+Q permette de
quitter l'application, le paramtre label devra tre _Quitter .

La quatrime fonction permet de crer un bouton avec un label, un raccourci clavier et une
image. Cependant, pour faire cela, GTK+ utilise les GtkStockItem qui est une structure contenant

1 sur 5 05/08/2015 05:19


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

les informations sur le label et l'image afficher. GTK+ comporte dj beaucoup de


GtkStockItem prdfinis (en tout cas les plus courants). Le paramtre stock_id est donc
l'identifiant du GtkStockItem utiliser. Pour notre exemple, l'identifiant est GTK_STOCK_QUIT.

V-A-2. Quitter l'application en cliquant sur le bouton

Pour cela, nous allons surveiller le signal clicked qui est mis lorsque l'utilisateur clique sur le
bouton. Lorsque ce signal est reu nous allons appeler gtk_main_quit pour fermer l'application et
dtruire tous les widgets. La ligne de code est donc :

Slectionnez
g_signal_connect(G_OBJECT(pQuitBtn), "clicked", G_CALLBACK(gtk_main_quit), NULL);

V-A-3. Affichage dans une fentre

Comme pour le chapitre prcdent, on utilise la fonction gtk_container_add pour insrer le


bouton dans la fentre et gtk_widget_show_all pour afficher le tout.

V-A-4. Programme exemple

Slectionnez
#include <stdlib.h>
#include <gtk/gtk.h>
#define EXEMPLE_1 0
#define EXEMPLE_2 1
#define EXEMPLE_3 2
void AddBtn(GtkWidget *pWindow, gint iExemple);
int main(int argc, char **argv)
{
GtkWidget* pWindow;
gtk_init(&argc, &argv);
/* Creation de la fenetre */
pWindow = gtk_window_new(GTK_WINDOW_TOPLEVEL);
gtk_window_set_default_size(GTK_WINDOW(pWindow), 320 ,200);

/* Connexion du signal "destroy" de la fenetre */


g_signal_connect(G_OBJECT(pWindow), "destroy", G_CALLBACK(gtk_main_quit), NULL);
/* Insertion du bouton */
AddBtn(pWindow, EXEMPLE_1);
/* Affichage de la fenetre */
gtk_widget_show_all(pWindow);
/* Demarrage de la boucle evenementielle */
gtk_main();
return EXIT_SUCCESS;
}
/*
void AddBtn(GtkWidget *pWindow, gint iExemple)

Fonction en charge d'inserer le bouton dans la fenetre

Parametre :
- pWindow : fenetre parente
- iExemple : mode de creation
EXEMPLE_1 pour un bouton label
EXEMPLE_2 pour un bouton EXEMPLE_1 + raccourci
EXEMPLE_3 pour un bouton EXEMPLE_2 + image
*/
void AddBtn(GtkWidget *pWindow, gint iExemple)
{
GtkWidget *pQuitBtn;
switch(iExemple)
{
default:
case EXEMPLE_1:
/* Bouton avec un label */
pQuitBtn = gtk_button_new_with_label("Quitter");
gtk_window_set_title(GTK_WINDOW(pWindow), "Les boutons - Exemple 1");
break;
case EXEMPLE_2:
/* Bouton avec un label et un raccourci */
pQuitBtn = gtk_button_new_with_mnemonic("_Quitter");
gtk_window_set_title(GTK_WINDOW(pWindow), "Les boutons - Exemple 2");
break;
case EXEMPLE_3:
/* Bouton avec un label, un raccourci et une image */
pQuitBtn = gtk_button_new_from_stock(GTK_STOCK_QUIT);
gtk_window_set_title(GTK_WINDOW(pWindow), "Les boutons - Exemple 3");
break;
}
/* Connexion du signal "clicked" du bouton */
g_signal_connect(G_OBJECT(pQuitBtn), "clicked", G_CALLBACK(gtk_main_quit), NULL);
/* Insertion du bouton dans la fenetre */
gtk_container_add(GTK_CONTAINER(pWindow), pQuitBtn);
}

Rsultat :

2 sur 5 05/08/2015 05:19


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

iExemple = EXEMPLE_1

iExemple = EXEMPLE_2

iExemple = EXEMPLE_3

V-B. En savoir plus

V-B-1. Signaux

Prototypes fonctions callback :

activate

Ce signal est mis lorsque le bouton a le focus est que l'on appuie sur la touche
Enter .

Slectionnez
void user_function(GtkButton *button, gpointer user_data);

enter

Ce signal est mis lorsque le pointeur de la souris entre dans la zone du bouton.

Slectionnez
void user_function(GtkButton *button, gpointer user_data);

leave

Ce signal est mis lorsque le pointeur de la souris quitte la zone du bouton.

Slectionnez
void user_function(GtkButton *button, gpointer user_data);

pressed

Ce signal est mis au moment o l'on appuie sur le bouton.

Slectionnez
void user_function(GtkButton *button, gpointer user_data);

released

Ce signal est mis au moment o l'on relche le bouton.

3 sur 5 05/08/2015 05:19


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

Slectionnez
void user_function(GtkButton *button, gpointer user_data);

V-B-2. Fonctions documentes

Slectionnez
void gtk_button_pressed(GtkButton *button);

Emet le signal pressed pour le GtkButton concern.

Entre(s) :

button : le bouton.

Sortie : rien.

Slectionnez
void gtk_button_released(GtkButton *button);

Emet le signal released pour le GtkButton concern.

Entre(s) :

button :le bouton.

Sortie : rien.

Slectionnez
void gtk_button_clicked(GtkButton *button);

Emet le signal clicked pour le GtkButton concern.

Entre(s) :

button : le bouton.

Sortie : rien.

Slectionnez
void gtk_button_enter(GtkButton *button);

Emet le signal enter pour le GtkButton concern.

Entre(s) :

button : le bouton.

Sortie : rien.

Slectionnez
void gtk_button_leave(GtkButton *button);

Emet le signal leave pour le GtkButton concern.

Entre(s) :

button : le bouton.

Sortie :rien.

Slectionnez
void gtk_button_set_relief(GtkButton *button, GtkReliefStyle newstyle);

Dfinit le style du bouton.

Entre(s) :

button : le bouton.
newstyle : style du bouton.

Les diffrents styles sont :

GTK_RELIEF_NORMAL (par dfaut) ;


GTK_RELIEF_HALF ;
GTK_RELIEF_NONE.

Sortie : rien.

Slectionnez
GtkReliefStyle gtk_button_get_relief(GtkButton *button);

Rcupre le style du bouton.

Entre(s) :

4 sur 5 05/08/2015 05:19


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

button : le bouton.

Sortie : GtkReliefStyle.

Slectionnez
void gtk_button_set_label(GtkButton *button, const gchar *label);

Modifie le texte d'un bouton.

Entre(s) :

button : le bouton.
label : le texte afficher.

Sortie : rien.

Slectionnez
G_CONST_RETURN gchar* gtk_button_get_label(GtkButton *button);

Rcupre le texte d'un bouton.

Entre(s) :

button : le bouton.

Sortie : const gchar*.

Slectionnez
gboolean gtk_button_get_use_stock(GtkButton *button);

Pour savoir si un bouton utilise les GtkStockItem.

Entre(s) :

button : le bouton.

Sortie : gboolean, TRUE si le bouton utilise un GtkStockItem, FALSE sinon.

Slectionnez
void gtk_button_set_use_stock(GtkButton *button, gboolean use_stock);

Dfinit si le bouton utilise un objet GtkStockItem.

Entre(s) :

button : le bouton.
use_stock : TRUE pour utiliser GtkStockItem, FALSE sinon.

Sortie : rien.

Slectionnez
gboolean gtk_button_get_use_underline(GtkButton *button);

Pour savoir si un bouton utilise un raccourci clavier.

Entre(s) :

button : le bouton.

Sortie :gboolean, TRUE si le bouton utilise un raccourci, FALSE sinon.

Slectionnez
void gtk_button_set_use_underline(GtkButton *button, gboolean use_underline);

Dfinit le bouton utilise un raccourci clavier.

Entre(s) :

button : le bouton.
use_underline : TRUE pour utiliser le raccourci, FALSE sinon.

Sortie : rien.

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:19