Les bases de la programmation Gtk+
1. La notion d'objet
Avant de commencer l'étude de la création d'interface graphique grâce à Gtk+, il faut savoir que les objets graphiques de Gtk+ sont appelés des widgets (Window Gadget). Un widget est en fait une structure définissant les propriétés d'un objet associé à une large panoplie de fonctions permettant de manipuler ces objets.
Ici, le terme "objet" est à prendre au sens littéral, mais aussi au sens Programmation Orientée Objet (POO). En effet, bien que GTK+ soit écrit en C, il introduit la notion d'héritage et les widgets de Gtk+ suivent une hiérarchie bien définie. Ainsi tous les objets graphiques héritent des propriétés et des fonctions d'un widget de base qui s'appelle
GtkWidget.
Ainsi le widget permettant d'afficher une fenêtre (
GtkWindow) a bien sûr ses propres fonctions, mais grâce à l'héritage il bénéficie aussi des fonctions des autres widgets dont il dérive.
2. La gestion des évènements
Afin de faire réagir une application aux actions de l'utilisateur, Gtk+les traite comme des évènements dans une boucle événementielle.
Lorsque l'utilisateur interagit avec l'application, qu'il clique sur un bouton, qu'il ferme une fenêtre, le widget concerné émet un signal spécifique. Chaque widget possède un signal pour chaque action possible.
Le signal est intercepté par une boucle événementielle. Celle-ci met en correspondance le signal envoyé et l'action spécifique prévue pour le signal. Si la correspondance est prévue, la fonction associée sera exécutée. Ces fonctions s'appellent fonction "callback".
Programmer avec les Widget revient à créer ces fonctions "callback" pour chacun des évènements susceptible d'avoir lieu pendant l'exécution du programme et à associer ces fonctions avec les signaux.
La première étape consiste donc à créer une fonction "callback". Dans la majorité des cas, ce sera sous cette forme :
def nom_de_la_fonction(widget, data):
Le paramètre
widget est le widget qui a émis le signal, et
data est une donnée supplémentaire utile à l'application.
Pour connecter un signal à notre fonction "callback", Gtk+ utilise la méthode connect :
object.connect(name, func, func_data )
L'
object, correspond au Widget qui émet le signal.
Le paramètre
name, est le signal qui doit être intercepté par la boucle événementielle. Dans ce cours, certains signaux seront utilisés dans les exemples, mais la rubrique "En savoir plus" donnera une liste complète des signaux qui peuvent être émis par un widget.
Le paramètre
func, définit la fonction callback à associer au signal.
Le paramètre
func_data, permet de spécifier une donnée quelconque à laquelle la fonction callback peut avoir accès pour effectuer son travail correctement.
Une fois que les signaux sont connectés, il faut lancer la boucle événementielle en appelant cette fonction :
gtk.main()
Cela aura pour effet de faire entrer Gtk+ dans une boucle infinie qui ne pourra être stoppée que par l'appel de la fonction de fin de boucle qui est :
gtk.main_quit()
Ces fonctions correspondent au minimum nécessaire afin de pouvoir créer une application Gtk+ correcte. D'autres fonctions permettent une utilisation avancée des signaux et de la boucle événementielle et sont traitées dans le chapitre
GSignal? du cours.
3. Les types de base