Tk::callbacks - Spécifier le code que Tk doit appeler.
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...?], ...
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 :
Ces diverses possibilités peuvent être accompagnées d'arguments en entourant le tout de crochets ([]). Voici quelques exemples :
$mw->bind($class, ``<Delete>'' => 'Delete');
Ceci appellera $widget->Delete, [la référence à] $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 :
$a->bind(``<Delete>'',[$b => 'Delete']);
puisque le premier élément $b est un objet, bind appelera $b->Delete.
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->configure(-yscrollcommand => [ set => $ysb ]);
$w->configure(-yscrollcommand => [ $ysb => 'set' ]);
mais toutes les deux appelleront $ysb->set (arguments fournis par Tk)
Une autre utilisation des arguments vous permet d'écrire des méthodes généralistes faciles à réutiliser :
$a->bind(``<Next>'',['Next','Page']);
$a->bind(``<Down>'',['Next','Line']);
Ceci appellera respectivement $a->Next('Page') ou $a->Next('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.
$entry->bind('<Return>' => [$w , 'validate', Ev(['get'])]); $toplevel->bind('all', '<Visibility>', [\&unobscure, Ev('s')]); $mw->bind($class, '<Down>', ['SetCursor', Ev('UpDownLine',1)]);
Tk::bind Tk::after Tk::options Tk::fileevent
callback, closure, anonymous subroutine, bind
Jean-Pierre Vidal jeanpierre.vidal@free.fr
Aucune relecture pour le moment.