callback

 

Certaines commandes utilisent des callbacks.

De quoi s'agit-il ?

Un script de callback est un script enregistré destiné à répondre à un évènement.

Exemples :

Caractéristique principale

Un script de callback est exécuté longtemps après avoir été enregistré :

  after 1000 { tk_messageBox -message "Coucou !" }

La message box apparaît 1 seconde après l'enregistrement du script par la commande after.

Contextes

Lors de l'enregistrement du script, la commande after peut utiliser le contexte d'exécution (ensemble des variables et procédures connues) pour construire le script :

  set msg "Coucou !"
  after 1000 [format {tk_messageBox -message %s} $msg]

Les variables peuvent même apparaître dans le script :

  set msg "Coucou !"
  after 1000 "tk_messageBox -message $msg"

Par contre, lors de l'exécution du script (bien lontemps après l'enregistrement), le script s'exécute en arrière-plan et ne connaît plus le contexte d'exécution de la commande after :

  set msg "Coucou !"
  after 1000 { tk_messageBox -message $msg }

Incapable d'accéder à la variable msg, le script va créer une erreur qui restera silencieuse.

Erreurs d'arrière-plan (background errors)

Les erreurs crées en arrière-plan restent silencieuses (ne sont pas reportées) sauf si l'on définit la procédure bgerror (background error handler) qui justement reporte les erreurs crées en arrière-plan :

  proc bgerror {msg} { tk_messageBox -message $msg }

Les contextes globaux

Le script de callback peut référencer les variables (ou les procédures) globales ou d'un namespace :

  set ::msg "Coucou !"
  after 1000 { tk_messageBox -message $::msg }

La variable ::msg est une variable du namespace de nom vide (ou namespace global) qui est toujours accessible et le script s'exécutera correctement.

Les commandes utilisant des scripts de callback

Tout ce qui vient d'être dit pour les scripts de la commande after reste vrai pour tous les scripts de callback.

Les commandes principales de Tcl et Tk utilisant des callback sont :

et la plupart des commandes créant ou modifiant un widget.

Précisions


Voir aussi


auteurs de l'article


Encyclopédie Tcl