Callbacks

15 11 2007

Un callback est une fonction qui est appelée lorsqu’un événement particulier se produit dans une interface graphique (interaction avec un objet graphique). On peut par exemple affecter à un bouton une fonction, de telle sorte que si l’utilisateur clique sur le bouton, la fonction en question est exécutée. Cette fonction est le callback associé à ce bouton. Un callback ne renvoit jamais de valeur.

Dans cet article, nous allons étudier la mise en place et l’utilisation des callbacks au sein d’une interface graphique.

En Matlab, le callback est défini au niveau de la propriété « callback » d’une fonction graphique (ex. uicontrol, uimenu, etc.). L’attribut donné à cette propriété peut être une chaîne de caractère ou un handle de fonction.

1. Création d’un callback simple

Dans un premier temps, nous allons présenter le cas des callbacks sans argument d’entrée. On rappelle qu’un callback ne peut pas avoir d’argument de sortie.

1.1. Callback sous forme de chaîne de caractères

Étudions l’exemple suivant :

function test()
h = figure();
uicontrol(h,’Style’,'PushButton’,'Callback’,'quit’);

L’appel à la fonction test crée une figure dont le handle est stocké dans la variable h ; ensuite, un objet de type « PushButton » (autrement dit un bouton) est affecté à cette figure. Un clic sur le bouton appelle la fonction quit, qui ferme Matlab.

Notes :

  • L’écriture de callbacks sous forme de chaînes de caractères ne convient que pour des callbacks très simples, typiquement l’appel d’une fonction sans argument d’entrée.
  • La chaîne de caractères décrivant la fonction de callback forme un nouveau workspace, ce qui signifie que les variables définies dans la fonction principale ne sont pas vues du callback, et qu’il faut déclarer ses globales, etc. Pour utiliser une variable de la fonction principale dans le callback, la seule solution est de remplacer la variable par sa valeur dans la chaîne définissant le callback, au moyen d’un sprintf.
  • Dans l’écriture des callbacks de cette manière, il est indispensable d’utiliser des « ; » et des « , », le passage à la ligne n’étant pas interprêté puisqu’il s’agit d’une chaîne ; il faut donc mettre des virgules après les if, etc.
  • Matlab ne « voit pas » les fonctions situées dans le même fichier source que celle appelant le callback ; autrement dit, si le callback consiste à appeler une fonction dont le code est dans le même fichier M, cela ne fonctionnera pas.

1.2. Callbacks sous la forme d’un handle de fonction

Reprenons l’exemple précédent, en remplaçant la chaîne de caractères par un handle de fonction :

function test()
h = figure();
uicontrol(h,’Style’,'PushButton’,'Callback’,@fermer);
% end function

function fermer(obj,eventdata)
quit;
%end function

Cette fois-ci, lors d’un clic sur le bouton, Matlab va tenter d’exécuter la fonction identifiée par le handle défini en valeur de l’attribut « callback ». La façon la plus simple de d’obtenir ce handle est de taper :

@nom_de_la_fonction

Il faut bien sûr que la fonction existe, et qu’elle soit dans le path de Matlab.


Actions

Information

Ajouter un commentaire

Vous pouvez utiliser ces étiquettes : <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>