(Tk)Trace

 

ulis, 2006-11-23. Un package pour tracer les commandes de Tk.

2006-11-24. Nouvelle version : v2, trace aussi les commandes Tcl (mais faut pas exagérer !).

  # test : appuyez sur le bouton
  tktrace refs add button
  tktrace events add .b:conf*:*-state%b* dump
  proc dump {args} { puts "-->$args" }
  button .b -text "c'est un texte" -command {c'est la commande}
  grid .b
  puts ##[tktrace refs]
  puts ##[tktrace events]

résultat :

  ### quand on appuie sur le bouton :
  -->.b configure -relief sunken -state active
  ### quand on relâche le bouton :
  -->.b configure -state normal

Pourquoi

Pour savoir comment ça se passe dans les entrailles de Tk.

Par exemple pendant un resize ou un invoke.


Comment

En interceptant les commandes Tk.


Utilisation

L'utilisation est en deux temps :

  1. Instrumenter une commande (mise en place de l'interception) : tktrace refs add button
  2. Enregistrer des évènements et leur associer un script : tktrace events add .b:conf*:*-state%b* dump

La commande peut être une commande standard comme bind ou une commande retournant une référence comme button, image create ou font create.

Pour ces dernières commandes on peut préciser les opérations qui retourne une référence.

Les évènements sont décrits en trois parties séparées par des : : .b:conf*:*-state%b*

  1. la commande (.b)
  2. l'opération (conf*)
  3. les arguments (*-state%b*)

Chaque partie peut contenir des caractères joker. Les blancs sont à mettre sous la forme %b.

  # ====================================
  # usage
  #
  #  package require TkTrace
  #  tktrace refs add button
  #  tktrace events add .b:conf*:*-state%b* dump
  #  proc dump {args} { puts "-->$args" }
  #  button .b -text "c'est un texte" -command {c'est la commande}
  #  grid .b
  ### quand on appuie sur le bouton :
  #-->.b configure -relief sunken -state active
  ### quand on relâche le bouton :
  #-->.b configure -state normal
  # ====================================
  #  opérations :
  #
  #   tktrace ?tk?
  # instrumente les principales commandes de Tk
  # et enregistre tous les évènements
  # -----------------------------------
  #   tktrace cmds
  # renvoie la liste de toutes les commandes instrumentées
  # ---
  #   tktrace cmds add|delete ?command?...
  # instrumente/supprime les commandes
  # (toutes les commandes si la liste est vide)
  # -----------------------------------
  #   tktrace events
  # renvoie la liste de tous les évènements enregistrés
  # ---
  #   tktrace events add|delete ?event-list script-prefix??...
  # enregistre/supprime les évènements à tracer
  #   - event : cmd?:arg0?:args??
  #   - les champs vides sont remplacés par *
  #   - les blancs doivent être remplacés par %b
  #   - le prefix de script reçoit la commande sous forme d'une liste d'arguments
  #   - le script par défaut est d'afficher la commande
  # -----------------------------------
  #   tktrace refs
  # renvoie la liste de tous les références instrumentées
  # ---
  #   tktrace refs add|delete ?{ref ?pattern?...}?...
  # instrumente/supprime une commande qui retourne une référence à instrumenter
  #   - pattern : pattern d'une opération qui retourne une référence
  # (tous les patterns si la liste est vide)
  # -----------------------------------
  #   tktrace script
  # renvoie le script standard
  # ---
  #   tktrace script script
  # enregistre le script standard
  # -----------------------------------
  #  exemples :
  #
  ### instrumentation des commandes principales de Tk
  # tktrace tk
  ### instrumentation de commandes créant des références
  # tktrace refs add sframe stext {image cre*}
  ### suppression de commandes créant des références
  # tktrace refs del font
  ### suppression de commandes Tk
  # tktrace cmds del wm winfo
  ### enregistrement de tous les évènements (*:*:*) avec le script standard
  # tktrace events add
  ### enregistrement des évènements .m:*:* et .m.*:*:* avec le script mytrace
  ### enregistrement de l'évènement .t:*:* avec le script standard
  # tktrace events add {.m  .m.*} mytrace .t
  ###enregistrement des évènements .:conf*:-bg et .:conf*:-bac* avec le script standard
  # tktrace events add {.:conf*:-bg  .:conf*:-bac*}
  ###enregistrement de l'évènement w:protocol:* avec le script standard
  # tktrace events add wm:protocol
  ### suppression de tous les évènements (*:*:*)
  # tktrace events del
  ### suppression de l'évènement *:xview
  # tktrace events del *:xview
  # ====================================

Installation


Script pkgIndex.tcl

  package ifneeded TkTrace 1.0 [list source [file join $dir TkTrace.tcl]]

Voir Aussi


Discussion


Catégorie Paquet | Catégorie Interface utilisateur