TP1 - Tutoriel Gtk+2.0/Glade
BUTS PÉDAGOGIQUES
- Découvrir par la pratique la programmation des interfaces graphiques
- Découvrir l'utilisation d'un constructeur d'interface
- Découvrir comment connecter les signaux d'une interface et comment accéder à ses composants
- Découvrir comment consulter et modifier la valeur d'un composant graphique
Plutôt qu'un cours théorique, vous allez apprendre par la pratique. Ce premier TP vous montre par l'exemple comment réaliser une première interface simple.
Un peu de vocabulaire :
• GUI = Graphical User Interface = une Interface Graphique
• Widget = Window Gadget = un composant graphique
Dans ce TP, nous allons découvrir les deux « outils » (complémentaires) suivants :
• GTK+ (Gimp Tool Kit) : une bibliothèque C pour faire des interfaces graphiques http://www.gtk.org/
Cette bibliothèque est écrite en C/C++ et peut être utilisée avec d'autres langages de programmation, comme : Python, Ada, PHP, R, Go, Pascal…
• Glade : un outil WYSIWYG pour construire une interface graphique GTK+ http://glade.gnome.org/
Exercice 1 • Votre première interface graphique avec GTK+ et Glade
1.1 Dessin de l'interface à l'aide de Glade
La première étape est de construire une fenêtre GtkWindow qui sera structurée par un conteneur GtkTable et qui contiendra trois étiquettes GtkLabel, deux zones de saisie GtkEntry et un bouton GtkButton :
- Lancez le programme
C:\"Program Files (x86)"\GLADE-3.8\bin\glade-3.exe
- Remarque : créer un raccourci sur votre bureau permettra d'aller plus vite les prochaines fois.
- À partir de ce point, les étapes sont décrites dans la vidéo
gtk-glade-v2.avi
:- Créez deux nouveaux répertoires
C:\PROG1ACI\1A_GUI_GTK\
etC:\PROG1ACI\1A_GUI_GTK\Addition\
- Copiez la vidéo dans
C:\PROG1ACI\1A_GUI_GTK\Addition\
- en la récupérant depuis le disque "Cours"
I:\G.RIVIERE\1A_Developpement_Rapide_Interfaces\
(de préférence, car plus rapide) - ou bien, en la récupérant depuis internet : gtk-glade-v2.avi (10 Mio)
- Attention, votre répertoire de travail sera
C:\PROG1ACI\1A_GUI_GTK\Addition\
ce qui diffère légèrement du chemin donné à la fin de la vidéo. - Branchez vos écouteurs pour avoir les commentaires et utilisez à bon escient le bouton pause pendant la lecture de cette vidéo !
- Créez deux nouveaux répertoires
Nous qualifions cette approche de « rapide » ou de « facile » car la visualisation du résultat est immédiate, d'une part, et car cela évite de produire le code « à la main » (et « en aveugle »), d'autre part. L'autre approche, que nous pouvons qualifier de « classique », consisterait par exemple à produire deux fichiers comme ceux-ci :addition.h
addition.c
1.2 Le fichier principal de l'interface (main.c
)
- À l'aide de
Notepad++
vous allez créer le fichierC:\PROG1ACI\1A_GUI_GTK\Addition\main.c
comme suit : - Remarquez que le fichier
addition.glade
créé précédemment à l'aide de Glade est utilisé par la fonctiongtk_builder_add_from_file()
.
1.3 Un fichier pour les fonctions de rappels de l'interface (callbacks.c
)
Avec Glade nous avons précédemment indiqué d'une part que le signal "destroy" de la fenêtre window1
serait connecté à une fonction nommée on_window1_destroy()
, et d'autre part, que le signal "clicked" du composant button_addition
serait connecté à une fonction nommée on_button_addition_clicked()
. Pour que notre interface puisse fonctionner, il faut donc écrire le code de ces deux « fonctions de rappel » (en d'autres termes, fonction qui sera appelée lorsque le signal correspondant sera émis par le composant auquel elle est connectée). Le rôle de la première fonction sera simplement de stopper la boucle d'exécution de GTK. Le rôle de la seconde sera de récupérer les valeurs saisies par l'utilisateur, de procéder au calcul et d'afficher le résultat.
- À l'aide de
Notepad++
vous allez créer le fichierC:\PROG1ACI\1A_GUI_GTK\Addition\callbacks.h
comme suit : - Vous allez maintenant créer le fichier
C:\PROG1ACI\1A_GUI_GTK\Addition\callbacks.c
- Au début du fichier copiez les inclusions d'entêtes suivantes :
- Afin de pouvoir utiliser la variable globale que nous avons définie dans le fichier
main.c
ajoutez ensuite cette déclaration : - Donnez le code suivant pour la fonction
on_window1_destroy()
:- Ainsi, fermer la fenêtre provoquera en même temps l'arrêt de la boucle GTK (lancée dans la fonction
main()
) puis le programme se terminera. - Car sinon, la fenêtre se fermera, mais le programme continuera de fonctionner !
- Ainsi, fermer la fenêtre provoquera en même temps l'arrêt de la boucle GTK (lancée dans la fonction
- Donnez le code suivant pour la fonction
on_button_addition_clicked()
:- Remarquez l'utilisation de sprintf() pour préparer les chaînes de caractères.
- Ajouter la fonction suivante avant les autres fonctions :
- La fonction isdigit() permet de savoir si le caractère est un chiffre.
- N'oubliez pas d'enregistrer les fichiers
main.c
,callbacks.h
etcallbacks.c
1.4 Compilation et exécution
- En programmation, lorsqu'on utilise une bibliothèque (comme GTK, mais encore OpenCV, OpenGL, … par exemple) il faut spécifier au compilateur différentes informations comme :
- Les répertoires où trouver les fichiers d'entête en
.h
(option-I
degcc
) - Les répertoires où trouver les fichiers
.lib
(option-L
degcc
) - Le nom des fichiers
.lib
qu'on souhaite utiliser (option-l
degcc
, mais sans écrire le.lib
)
- Les répertoires où trouver les fichiers d'entête en
- L'écriture de la commande de compilation devient alors longue et difficile à écrire ! La solution est alors de passer par un fichier dit
Makefile
qui décrit comment le projet doit être compilé (voir dans le chapitre 1 du cours de programmation procédurale). Téléchargez, dans le répertoireC:\PROG1ACI\1A_GUI_GTK\Addition
, le fichier Makefile déjà écrit.- Attention, le fichier doit s'appeler
Makefile
et non pasMakefile.txt
, il faudra donc peut être le renommer comme suit depuis une console :rename Makefile.txt Makefile
- Ouvrez maintenant le fichier
Makefile
avecNotepad++
et examinez son contenu.
- Attention, le fichier doit s'appeler
- Depuis la console :
- Depuis le répertoire
C:\PROG1ACI\1A_GUI_GTK\Addition
- Pour exécuter le fichier
Makefile
tapez simplementmake
- Et si tout s'est bien passé, tapez
addition.exe
- Si jamais un message d'erreur apparaît concernant les DLL (ex. : zlib1.dll), c'est parce que d'autres versions de la bibliothèque sont installées sur votre système.
- Dans ce cas, copiez directement la bonne version des DLL de GTK à côté de votre exécutable, comme ceci :
copy C:\"Program Files (x86)"\GTK\bin\*.dll C:\PROG1ACI\1A_GUI_GTK\Addition\
- Essayez de nouveau de lancer
addition.exe
- Vous devez alors voir la fenêtre suivante apparaître :
- Depuis le répertoire
Exercice 2 • Un utilitaire pour les pourcentages
En vous inspirant de l'interface précédente, faire une nouvelle interface GTK+ appelée « pourcentages » (qui sera enregistrée dans C:\PROG1ACI\1A_GUI_GTK\Pourcentages\
). Le but est que l'utilisateur saisit 2 nombres entiers X
et Y
, et que l'interface puisse calculer et afficher le pourcentage d'augmentation qu'il a fallu appliquer à X
pour obtenir Y
. Essayez ensuite d'adapter le programme pour gérer les nombres réels.
Besoin d'aide pour la formule de calcul ?
Exemples :
Exemple avec des nombres à virgule :
Documentation GTK+ 2 :
• API : Widgets and Objects
• Manuel : Reference Manual
• Tutoriel : GTK+ 2.0 Tutorial
• Tutoriel : The GTK+ tutorial