Signals and callbacks (Python) Une explication des signaux et rappels dans GTK+. Sebastian Pölsterl sebp@k-d-w.org 2011 Marta Maria Casetti mmcasetti@gmail.com 2012 Luc Rebert, traduc@rebert.name 2011 Alain Lojewski, allomervan@gmail.com 2011-2012 Luc Pionchon pionchon.luc@gmail.com 2011 Bruno Brouard annoa.b@gmail.com 2011-12 Luis Menina liberforce@freeside.fr 2014 Signaux et rappels
Présentation

Comme la plupart des boîtes à outils d'interfaces utilisateurs, GTK+ utilise un modèle de programmation événementiel. Lorsque l'utilisateur ne fait rien, GTK+ attend qu'une entrée se fasse dans la boucle principale. Dès que l'utilisateur fait quelque chose (disons un clic de souris), alors la boucle principale « se réveille » et fournit un événement à GTK+.

Lorsque les éléments graphiques reçoivent un événement, il émettent la plupart du temps un ou plusieurs signaux. Ces signaux indiquent à votre programme que « quelque chose d'intéressant vient de se passer » en exécutant les fonctions que vous leur avez connecté. Lorsque vos rappels sont exécutés, vous agissez normalement en conséquence. Après la fin d'un rappel, GTK+ retourne dans la boucle principale et attend d'autres événements.

Voici un exemple générique : handler_id = widget.connect(evenement, rappel, donnees). widget est un exemple d'élément graphique que nous avons créé un peu plus tôt. Puis vient l'evenement qui nous intéresse. Chaque élément graphique possède ses propres événements pouvant arriver. Par exemple, si vous connectez un Gtk.Button à l'événement « cliqué » : chaque fois que ce bouton est cliqué, le signal est émis. Un autre exemple avec le signal notify::property : chaque fois qu'une propriété d'un GObject est modifiée, GObject associe comme détail à l'émission de ce signal, le nom de la propriété modifiée au lieu de seulement émettre le signal notify. Cela permet aux clients qui ne veulent être informés des modifications que d'une seule propriété de filtrer la plupart des événements avant de les recevoir. Troisièmement, l'argument de rappel est le nom de la fonction de rappel, qui contient le code en cours d'exécution quand les signaux de ce type spécifique sont émis. Enfin, l'argument optionnel de données inclut toute donnée devant être passée quand le signal est émis.

La fonction renvoie un nombre (le handler_id) qui identifie cette paire particulière de signal-rappel. Ce nombre est nécessaire pour se déconnecter d'un signal de façon à ce que la fonction de rappel ne soit plus appelée, ni par la suite, ni pendant les émissions du signal à laquelle elle est actuellement connectée, comme dans widget.disconnect(handler_id).

Références

Les signaux dans la documentation GObject

Basics - Main loop and Signals in Python GTK+ 3 Tutorial