=head1 NOM Tk::callbacks - Spécifier le code que Tk doit appeler. =head1 SYNOPSIS On peut spécifier un callback de l'une des manières suivantes : Sans arguments: ... => \&subname, ... ... => sub { ... }, ... ... => 'methodname', ... ou avec des arguments : ... => [ \&subname ?, args ...? ], ... ... => [ sub { ... } ?, args...? ], ... ... => [ 'methodname' ?, args...?], ... =head1 DESCRIPTION Perl/Tk possède un callback, là où Tcl/Tk possède une ligne de commande (c'est à dire un fragment de Tcl à exécuter). Un callback perl/Tk peut prendre l'une des formes de base suivantes : =over 4 =item * Référence à une subroutine "\&subname" =item * Subroutine anonyme (fermeture) "sub { ... }" =item * Un nom de méthode 'methodname' =back Ces diverses possibilités peuvent être accompagnées d'arguments en entourant le tout de crochets (B<[]>). Voici quelques exemples : I<$mw>-EB(I<$class,> B<"EDeleteE" =E 'Delete'>); Ceci appellera I<$widget>->B, [la référence à] I<$widget> étant fournie (par bind) lorsque la touche Delete sera pressée. Le fait que bind fournisse un objet widget est idéal dans beaucoup de situations mais peut être irritant dans d'autres. Ce comportement peut être modifié en utilisant la forme liste : I<$a>-EB(B<"EDeleteE">,[I<$b> =E 'Delete']); puisque le premier élément I<$b> est un objet, bind appelera I<$b>->B. Notez que l'ordre des méthodes/objets n'ayant de sens que pour les callbacks "bind", l'"auto-quotation" dans perl5.001 rend la première des instructions suivantes un peu plus lisible : $w-Econfigure(-yscrollcommand => [ set => $ysb ]); $w-Econfigure(-yscrollcommand => [ $ysb => 'set' ]); mais toutes les deux appelleront $ysb-Eset (arguments fournis par Tk) Une autre utilisation des arguments vous permet d'écrire des méthodes généralistes faciles à réutiliser : $a-Ebind("",['Next','Page']); $a-Ebind("",['Next','Line']); Ceci appellera respectivement $a-EI('Page') ou $a-EI('Line'). Notez que le contenu de "[]" est évalué par perl à la création du callback. On désire souvent que les arguments fournis au callback dépendent du détail de l'événement qui a provoqué son exécution. Pour répondre à cela les callbacks peuvent être imbriquées en utilisant le "constructeur" "Ev(...)". "Ev(...)" insère les objets callback dans la liste d'arguments du callback. Lorsque le code de collage de perl/Tk prépare la liste d'arguments pour le callback qu'il s'apprête à appeler, il s'intéresse à ces objets spéciaux et leur applique récursivement le processus de callback. =head1 EXEMPLES $entry->bind('' => [$w , 'validate', Ev(['get'])]); $toplevel->bind('all', '', [\&unobscure, Ev('s')]); $mw->bind($class, '', ['SetCursor', Ev('UpDownLine',1)]); =head1 VOIR AUSSI Tk::bind Tk::after Tk::options Tk::fileevent =head1 MOTS-CLÉS callback, closure, anonymous subroutine, bind =head1 TRADUCTION Jean-Pierre Vidal jeanpierre.vidal@free.fr =head1 RELECTURE Aucune relecture pour le moment.