Programmation GTK2 en Pascal/GtkButton
Présentation.
Élément essentiel d'une interface graphique, le contrôle GtkButton est un bouton de base, une zone rectangulaire mis en valeur par un relief et un label. Gtk+ permet néanmoins d'aller plus loin, en pouvant lui ajouter des éléments comme des images « pixmap » ou autres.
Utilisation de base.
Création d'un bouton.
Pour créer un bouton, Gtk+ permet l'utilisation de quatre fonctions différentes :
 function gtk_button_new : PGtkWidget;
 function gtk_button_new_with_label(_label : Pgchar) : PGtkWidget;
 function gtk_button_new_with_mnemonic(_label : Pgchar) : PGtkWidget;
 function gtk_button_new_from_stock(stock_id : Pgchar) : PGtkWidget;
La première fonction permet de créer un bouton vide. Cela permet de personnaliser complètement le bouton car codice_1 dérive de codice_2. On peut donc inclure n'importe quel type de contrôle dans le bouton (codice_3, codice_4, etc.). Comme il dérive également de codice_5, il ne peut contenir qu'un seul contrôle, il faudra donc passer par un codice_6 pour inclure plusieurs contrôles.
La deuxième fonction s'occupe en plus d'insérer un label à l'intérieur du bouton. Le paramètre codice_7 (le caractère souligné permet d'éviter d'utiliser « label » directement qui est un mot réservé en Pascal) correspond au texte à afficher. Comme pour le contrôle codice_3, si un caractère accentué est utilisé, il faudra appeler la fonction codice_9 pour avoir un affichage correct du texte.
La troisième fonction ajoute à cela une nouvelle fonctionnalité. Elle permet, en plus d'afficher un label, de faire réagir le bouton à l'aide d'un raccourci clavier. La touche servant de raccourci est spécifiée dans le paramètre codice_10. Il suffit de mettre « _ » devant la lettre souhaitée pour que la combinaison Atl+Touche active le bouton.
La quatrième fonction permet de créer un bouton avec un label, un raccourci clavier et une image. Cependant, pour faire cela, Gtk+ utilise les codice_11 qui est une structure contenant les informations sur le label et l'image à afficher. Gtk+ comporte déjà beaucoup de codice_12 prédéfinis (en tout cas les plus courant). Le paramètre codice_13 est donc l'identifiant du codice_12 à utiliser.
Une fois le bouton créé, il ne reste plus qu'à l'inclure dans une fenêtre et de connecter le signal codice_15, pour qu'un clic de souris sur le bouton corresponde à une action précise.
Modifier le texte d'un bouton.
À tout moment pendant l'exécution du programme, nous pouvons connaître ou modifier le texte d'un bouton à l'aide d'une de ces deux fonctions :
 function gtk_button_get_label(button : PGtkButton) : Pgchar;
 procedure gtk_button_set_label(button : PGtkButton; _label : Pgchar);
La première fonction renvoie le texte du bouton codice_16 (premier paramètre), tandis que la deuxième modifie le texte du bouton par la valeur du deuxième paramètre codice_7.
Programme exemple.
Pour ce chapitre, notre objectif sera de créer une application contenant trois boutons qui permettront de quitter l'application, un avec un label simple, un autre avec un label muni d'un raccourci clavier et le troisième avec une image issu du stock de bouton.
Voilà le fichier codice_18 :
 program gtk020;
 uses glib2, gtk2;
 var
 pFenetre : PGtkWidget;
 pVBox : PGtkWidget;
 pBtn : PGtkWidget;
 begin
 gtk_init(@argc, @argv);
 pFenetre := gtk_window_new(GTK_WINDOW_TOPLEVEL);
 gtk_window_set_position(GTK_WINDOW(pFenetre), GTK_WIN_POS_CENTER);
 gtk_window_set_default_size(GTK_WINDOW(pFenetre), 320, 200);
 gtk_container_set_border_width(GTK_CONTAINER(pFenetre), 4);
 gtk_window_set_title(GTK_WINDOW(pFenetre), 'Gtk020 : Bouton');
 gtk_signal_connect(pGTKOBJECT(pFenetre), 'destroy', GTK_SIGNAL_FUNC(@gtk_main_quit), NULL);
 pVBox := gtk_vbox_new(TRUE, 0);
 gtk_container_add(GTK_CONTAINER(pFenetre), pVBox);
 // Création du bouton 1
 pBtn := gtk_button_new_with_label('Quitter');
 gtk_box_pack_start(GTK_BOX(pVBox), pBtn, TRUE, FALSE, 5);
 g_signal_connect(pGTKOBJECT(pBtn), 'clicked', GTK_SIGNAL_FUNC(@gtk_main_quit), NULL);
 // Création du bouton 2
 pBtn := gtk_button_new_with_mnemonic('_Quitter');
 gtk_box_pack_start(GTK_BOX(pVBox), pBtn, TRUE, FALSE, 5);
 g_signal_connect(pGTKOBJECT(pBtn), 'clicked', GTK_SIGNAL_FUNC(@gtk_main_quit), NULL);
 // Création du bouton 3
 pBtn := gtk_button_new_from_stock(GTK_STOCK_QUIT);
 gtk_box_pack_start(GTK_BOX(pVBox), pBtn, TRUE, FALSE, 5);
 g_signal_connect(pGTKOBJECT(pBtn), 'clicked', GTK_SIGNAL_FUNC(@gtk_main_quit), NULL);
 gtk_widget_show_all(pFenetre);
 gtk_main;
 end.
Voilà ce que donne l'exécution du programme codice_19 :

Programmation GTK2 en Pascal/GtkToggleButton