- NOM
- bind - associe des scripts Tcl aux évènements d'interface graphique
- SYNTAXE
- bind tag
- bind tag séquence
- bind tag séquence script
- bind tag séquence +script
- INTRODUCTION
- MODELES D'EVENEMENTS
- MODIFICATEURS
- TYPES D'EVENEMENTS
- Activate
- Deactivate
- MouseWheel
- SCRIPTS DE LIAISON ET SUBSTITUTIONS
- %%
- %#
- %a
- %b
- %c
- %d
- %f
- %h
- %k
- %m
- %o
- %p
- %s
- %t
- %w
- %x
- %y
- %A
- %B
- %D
- %E
- %K
- %N
- %R
- %S
- %T
- %W
- %X
- %Y
- MULTIPLE MATCHES
- MULTI-EVENT SEQUENCES AND IGNORED EVENTS
- ERREURS
- VOIR EGALEMENT
- MOTS-CLES
bind - associe des scripts Tcl avec les évènements d'interface graphique
bind tag
bind tag séquence
bind tag séquence script
bind tag séquence +script
La commande bind lie les scripts Tcl avec les évènements d'interface graphique.
Si les trois arguments sont spécifiés, bind préparera script (un script Tcl) a être évalué chaque fois que l'évènement(s) désigné par séquence se produit dans la fenêtre(s) identifiée par tag.
Si script est précédé de ``+'', alors il est ajouté à toute liaison existante pour séquence; autrement script remplace
toute liaison existante.
Si script est une chaîne vide alors la liaison courante pour
séquence est détruite, et séquence n'est pas liée.
Dans tous les cas où un argument script est fourni,
bindretourne une chaîne vide.
Si séquence est spécifiée sans script, alors le script couramment lié à séquence est renvoyé, ou une chaîne vide est renvoyée s'il n'y a pas de liaison pour séquence.
Si ni séquence ni script ne sont spécifiés, alors la valeur de retour est une liste dont les éléments sont toutes les séquences pour lesquelles il existe des liaisons pour tag.
L'argument tag détermine à quelle fenêtre(s) la liaison s'applique.
Si tag commence avec un point, comme dans .a.b.c, alors ce doit être le nom de chemin d'une fenêtre; autrement ce peut être une chaîne arbitraire.
Chaque fenêtre a une liste de tags associés, et une liaison est appliquée à une fenêtre particulière si son tag est parmi ceux spécifiés pour la fenêtre.
Bien que la commande bindtags puisse être employée pour assigner un ensemble arbitraire de tags de liaison à une fenêtre, le tag de liaison par défaut fournit les comportement suivants:
-
Si un tag est le nom d'une fenêtre interne la liaison s'applique à cette fenêtre.
Si le tag est le nom d'une de premier plan la liaison s'applique à la fenêtre de premier plan et à toutes ses fenêtres internes.
Si le tag est le nom d'un classe de widgets, tel que Button, la liaison s'applique à tous les widgets dans cette classe;
Si tag a la valeur all, la liaison s'applique à toutes les fenêtres dans l'application.
L'argument séquence spécifie une séquence d'un ou plusieurs modèles d'évènement, avec un espace optionnel entre les modèles. Chaque modèle d'évènement peut prendre une parmi trois formes. Dans le cas le plus simple c'est un simple caractère ASCII imprimable, tel que a ou [. Le caractère ne peut pas être un espace ou le caractère <. Cette forme de modèle correspond a un évènement KeyPress pour le caractère. La seconde forme de modèle est plus longue mais plus générale.
Elle a la syntaxe suivante:
<modificateur-modificateur-type-detail>
Le modèle d'évènement entier est entouré par des signes inférieur à/supérieur à. Entre les signes on trouve zéro ou plusieurs modificateurs, un type d'évènement, et une information additionelle type, detail) iidentifiant une touche ou un bouton particulier. N'importe quel des champs peut être omis, tant qu'au moins un des type et detail est présent.
Les champs doivent être séparés par des espaces ou des tirets.
La troisième forme est utilisée pour spécifier un modèle défini par l'utilisateur, nommé évènement virtuel. Elle a la syntaxe suivante:
<<NOM>>
Le modèle d'évènement virtuel est entouré par des double signes inférieur à/supérieur à. Entre les signes on trouve le nom de l'évènement virtuel.
Les modificateurs, tel que Shift ou Control, , ne peuvent pas être combinés avec un évènement virtuel pour le modificateur. Les liaisons sur un évènement virtuel peuvent être créés avant que l'évènement virtuel soit défini, et si la définition d'un évènement virtuel change dynamiquement, toutes les fenêtres attachées à cet évènement virtuel répondront immédiatement à la nouvelle définition.
Les modificateurs consistent en n'importe quelle des valeurs suivantes:
Control Mod2, M2
Shift Mod3, M3
Lock Mod4, M4
Button1, B1 Mod5, M5
Button2, B2 Meta, M
Button3, B3 Alt
Button4, B4 Double
Button5, B5 Triple
Mod1, M1 Quadruple
Si plusieurs valeurs sont listées, séparées par des virgules, les valeurs sont équivalentes. La plupart des modificateurs ont une signification évidente. Par exemple, Button1 exige un appui sur le bouton quand l'évènement se produit. Pour qu'une liaison corresponde à un évènement donné, les modificateurs dans l'évènement doivent inclure tous ceux spécifiés dans le modèle de l'évènement. Un évènement peut aussi contenir des modificateurs supplémentaires non spécifiés dans la liaison. Par exemple, si le bouton 1 est pressé alors que les touches shift et contrôle sont enfoncées, le modèle <Control-Button-1> correspondra à l'évènement, mais <Mod1-Button-1> > non. Si aucuns modificateurs ne sont spécifiés, alors n'importe quelle combinaison de modificateurs peut être présente dans l'évènement.
Meta et M se referent à chacun des modificateurs M1 à M5 associés à la meta touche(s) sur le clavier (touches Meta_R et Meta_L). Si il n'y a pas de meta touches, ou si elles ne sont pas associées à un modificateur, alors Meta et M ne correspondront à aucun évènements.
De même, le modificateur Alt se refère à tout modificateur associé à la touche alt sur le clavier (touches
Alt_L et Alt_R).
Les modificateurs Double, Triple et Quadruple servent à specifier les double clics et autres évènements répétés. Ils provoquent la répétition d'un modèle d'évènement particulier 2 ou 3 fois, et pose également une condition de temps et d'espace sur la séquence: pour qu'une séquence d'évènements corresponde à un modèle Double, Triple ou Quadruple, tous les évènements doivent se produire dans une durée très courte et sans déplacement de la souris. Par exemple, <Double-Button-1>
est équivalent à <Button-1><Button-1> avec la condition supplémentaire de temps et d'espace.
Le champ typepeut être n'importe quel des types standard d'évènement X, avec quelques abréviations. Le champ type admet également plusieurs types d'évènement X qui ont été ajoutés pour mieux supporter les plateformes Macintosh et Windows. Voir ci-dessous une liste de tous les types valides; quand deux noms apparaissent ensemble, ils sont synonymes.
Activate Enter Map
ButtonPress, Button Expose Motion
ButtonRelease FocusIn MouseWheel
Circulate FocusOut Property
Colormap Gravity Reparent
Configure KeyPress, Key Unmap
Deactivate KeyRelease Visibility
Destroy Leave
La plupart des évènements ci-dessus ont les même champs et comportements que les évènements
du système X Window. Vous pouvez trouver des descriptions plus détaillées de ces
évènements dans n'importe quel livre de programmation X. Plusieurs de ces évènements
sont des extensions au système d'évènements X pour supporter des fonctionnalités particulières au plateformes Macintosh et Windows. Nous vous donnons ici un peu plus de détais sur ces évènements. Ils incluent:
- Activate
-
- Deactivate
-
Ces deux évènements sont envoyés à chaque sous-fenêtres d'une toplevel quand elles
changent d'état. En plus de la fenêtre qui détient le focus, les plateformes Macintosh
et Windows ont une notion de fenêtre active (qui souvent mais pas toujours
détient le focus). Sur Macintosh, les widgets dans la fenêtre active
ont un aspect différent des widgets dans une fenêtre inactive. L'évènement Activate est envoyé à toutes les sous-fenêtres
d'une toplevel quand elle devient active. De même, l'évènement Deactive est envoyé quand l'état de la fenêtre passe d'actif à inactif. Vous ne pouvez pas utiliser les
substitutions pourcentage quand vous liez à ces évènements.
- MouseWheel
-
Certaines souris sous Windows ont une roulette utilisée pour faire défiler
les documents sans utiliser les barres de défilement. Quand la roulette tourne, le système génère des évènements MouseWheel que l'application peut utiliser pour scroller. Comme les évènements Key l'évènement est
toujours dirigé vers la fenêtre qui détient le focus. Quand l'évènement
est reçu vous pouvez utiliser la substitution %D pour obtenir le
champ delta de l'évènement qui est la valeur entière du déplacement de la souris. La plus petite valeur que le système rapporte est définie par l'OS. Sur les machines Windows 95 & 98 cette valeur est au moins de 120 avant d'être signalée. Néanmoins, des périphériques avec des résolution supérieures pourraient apparaitre dans le futur. Le signe de la
valeur determine la direction du défilement du widget. Les valeurs positives
défileront vers le haut, les négatives vers le bas.
La dernière partie de cette longue spécification est detail. Dans le
cas d'un évènement ButtonPress ou ButtonRelease , c'est le
numéro du bouton(1-5). Si un numéro de bouton est donné, alors seulement un
évènement de ce bouton sera affecté; Si aucun numéro de bouton n'est indiqué, alors un évènement sur n'importe quel bouton correspondra. Note: indiquer un
numéro de bouton spécifique est différent d'indiquer un modificateur de bouton;
dans le premier cas, il se réfère à l'appui ou au relachement d'un bouton,
dans le second il se réfère à un autre bouton qui est déja appuyé
quand l'évènement correspondant se produit. Si un numéro de bouton
est donné alors type peut être omis: il sera par défaut
ButtonPress. Par exemple, le spécificateur <1>
est équivalent à <ButtonPress-1>.
Si le type d'évènement est KeyPress ou KeyRelease, alors
detail peut être spécifié sous la forme d'une keysym X. Les keysyms
sont des spécifications textuelles de touches du clavier;
elles incluent tous les caractères alphanumériques ASCII (ex. ``a'' est
la keysym du caractère ASCII ``a''), plus des descriptions des
caractères non-alphanumériques (``comma'' est la keysym de la virgule
), et des descriptions des touches non-ASCII (``Shift_L'' est la keysm de la touche shift gauche, et ``F1'' est la keysym de la touche de fonction F1 , si elle existe). La
liste complète of keysyms n'est pas exposée ici; elle est
disponible dans la documentation X et peut varier d'un système à un autre.
Si nécessaire, vous pouvez utiliser la notation %K décrite ci-dessous
pour afficher le nom de la keysym d'une touche particulière.
Si un detail de keysym est donné, alors le
champ type peut être omis; il sera par défaut de KeyPress.
Par exemple, <Control-comma> est équivalent à
<Control-KeyPress-comma>.
L'argument script de bind est un script Tcl,
qui sera exécuté chaque fois que l'évènement désigné se produit.
Command sera exécutée dans le même interpréteur que celui dans lequel la
commande bind a été exécutée, et s'exécutera au niveau global
(seules les variables globales seront accessibles).
Si script contient
des caractères% , alors le script ne sera pas
exécuté directement. A la place, un nouveau script sera
généré en remplacant chaque %, et le caractère suivant, par l'information de l'évènement courant. Le remplacement
depend du caractère suivant la %, comme défini dans la
liste ci-dessous. A moins qu'autrement indiqué, la chaîne de
remplacement est la valeur décimale du champ donné de l'évènement courant.
Certaines des substitutions sont seulement valides pour
certain types d'évènements; si elles sont utilisées pour d'autres types d'évènements
la valeur substituée est indéfinie.
- %%
-
Remplacée par un seul signe pourcentage.
- %#
-
Le numéro de la dernière requête client traitée par le serveur
(le champ serial de l'évènement). Valide pour tout types d'évènements.
- %a
-
Le champ above de l'évènement,
formaté en nombre hexadécimal.
Valide seulement pour les évènementsConfigure .
- %b
-
Le numéro du bouton pressé ou relaché. Valide seulement
pour les évènementsButtonPress et ButtonRelease .
- %c
-
Le champ count de l'évènement. Valide seulement pour les évènements Expose .
- %d
-
Le champ detail de l'évènement. Le %d est remplacé par
une chaîne identifiant le détail. Pour les évènementsEnter,
Leave, FocusIn, et FocusOut ,
la chaîne sera une des suivantes:
NotifyAncestor NotifyNonlinearVirtual
NotifyDetailNone NotifyPointer
NotifyInferior NotifyPointerRoot
NotifyNonlinear NotifyVirtual
Pour les évènements autre que ceux-ci, la chaîne substituée est indéfinie.
- %f
-
Le champ focus de l'évènement (0 ou 1). Valide seulement
pour les évènementsEnter et Leave .
- %h
-
Le champ height de l'évènement. Valide pour les évènementsConfigure et
Expose .
- %k
-
Le champ keycode de l'évènement. Valide seulement pour les évènementsKeyPress
et KeyRelease .
- %m
-
Le champ mode de l'évènement. La chaîne substituée est une de
NotifyNormal, NotifyGrab, NotifyUngrab, ou
NotifyWhileGrabbed. Valide seulement pour les évènementsEnter,
FocusIn, FocusOut, et Leave .
- %o
-
Le champ override_redirect de l'évènement. Valide seulement pour les évènements
Map, Reparent, et Configure .
- %p
-
Le champ place de l'évènement, substituée comme une des
chaînes PlaceOnTop ou PlaceOnBottom. Valide seulement
pour les évènementsCirculate .
- %s
-
Le champ state de l'évènement. Pour les évènementsButtonPress,
ButtonRelease, Enter, KeyPress, KeyRelease,
Leave, et Motion , une chaîne décimale
est substituée. Pour Visibility, une des chaînes
VisibilityUnobscured, VisibilityPartiallyObscured,
et VisibilityFullyObscured est substituée.
- %t
-
Le champ time de l'évènement. Valide seulement pour les évènements qui
contiennent un champtime .
- %w
-
Le champ width de l'évènement. Valide seulement pour les évènements
Configure et Expose .
- %x
-
Le champ x de l'évènement. Valide seulement pour les évènements contenant
un champx .
- %y
-
Le champ y de l'évènement. Valide seulement pour les évènements contenant
un champy .
- %A
-
Substitue le caractère ASCII correspondant à l'évènement, ou
la chaîne vide si l'évènement ne correspond pas à un caractère ASCII
(ex. la touche shift a été appuyée). XLookupString accomplit tout le travail de traduction de l'évènement en caractère ASCII .
Valide seulement pour les évènementsKeyPress et KeyRelease .
- %B
-
Le champ border_width from l'évènement. Valide seulement pour les évènements
Configure .
- %D
-
Ceci renvoie la valeur delta d'un évènementMouseWheel. La
valeur delta represente les unités de rotation dont la souris à roulette a été
déplacée. Sur Windows 95 & 98 la plus petite valeur de
delta est 120. Des systèmes futurs pourront supporter des résolution plus èlevées pour
delta. Le signe de la valeur represente la direction dans laquelle la roulette a tourné.
- %E
-
Le champ send_event de l'évènement. Valide pour tous types d'évènement.
- %K
-
La keysym correspondant à l'évènement, substituée en chaîne textuelle. Valide seulement pour les évènements KeyPress et KeyRelease .
- %N
-
La keysym correspondant à l'évènement, substituée en nombre décimal. Valide seulement pour les évènementsKeyPress et KeyRelease .
- %R
-
L'identificateur de fenêtre root de l'évènement. Valide seulement pour
évènements contenant un champroot .
- %S
-
L'identificateur de fenêtre subwindow de l'évènement,
formaté comme nombre hexadécimal.
Valide seulement pour évènements contenant un champ subwindow .
- %T
-
Le champ type de l'évènement. Valide pour tout types d'évènement.
- %W
-
Le nom de chemin de fenêtre auquel l'évènement se rapporte (le
champ fenêtre de l'évènement). Valide pour tout types d'évènement.
- %X
-
Le champ x_root de l'évènement.
Si un gestionnaire de fenêtres virtuel-root est utilisé alors la valeur substituée
est la coordonnée x correspondante dans la virtuel root.
Valide seulement pour les évènements
ButtonPress, ButtonRelease, KeyPress, KeyRelease,
et Motion .
- %Y
-
le champ y_root de l'évènement.
Si un gestionnaire de fenêtres virtuel-root est utilisé alors la valeur substituée
est la coordonnée y correspondante dans la virtuel root.
Valide seulement pour les évènements
ButtonPress, ButtonRelease, KeyPress, KeyRelease,
et Motion .
La chaîne de remplacement induite par % est formatée comme un
élément de liste Tcl correct.
Ceci signifie qu'il sera entouré d'accolades
s'il contient des espaces, ou que les caractères speciaux comme $ et
{ soient précédés de backslashes.
Ceci garantit que la chaîne sera transmise à l'analyseur Tcl
quand le script de liaison est evalué.
La plupart des remplacements sont des nombres ou des chaînes clairement définies comme
Above; pour ces remplacements aucun formatage spécial n'est nécessaire.
Le cas le plus commun ou le formatage se produit est lors de la substitution%A
. Par exemple, si script est
insert %A
et que le caractère tapé est un crochet ouvrant, alors le script
exécuté sera
insert \[
Ceci provoquera la reception par insert de la chaîne originale de remplacement
(le crochet ouvrant) comme premier argument
Si le backslash supplémentaire n'avait été ajouté, Tcl n'aurait pas pu
analyser le script correctement.
Il est possible pour plusieurs bindings de correspondre à un évènement X donné.
Si les bindings sont associés à différents tag's,
alors chacun des bindings sera exécuté, dans l'ordre.
Par défaut, le binding du widget sera exécuté d'abord, suivi
par le binding de class, le binding de sa toplevel, et
un bindingall .
La commande bindtags peut être utilisée pour changer cet ordre pour une
fenêtre particulière ou pour associer des tags de binding supplémentaires à la
fenêtre.
Les commandes continue et break peuvent être utilisées dans un
script de binding pour contrôler le traitement des scripts.
Si continue est appelée, alors le binding script courant
est interrompu mais Tk will continue le traitement des scripts
associés aux autres tag's.
Si la commande break est appelée dans un script de binding ,
alors ce script se termine et aucun autre script sera appelé
pour l'évènement.
Si plus d'un binding est associé à un évènement particulier et qu'ils
ont les même tag, alors le binding le plus spécifique
est choisi et son script est evalué.
Les tests suivants sont appliqués, dans l'ordre, pour déterminer laquelle parmi plusieurs séquences est la plus spécifique:
(a) un modèle d'évènement qui désigne un bouton ou une touche spécifique est plus spécifique
qu'un modèle qui ne désigne rien;
(b) une séquence plus longue (en termes de nombre
d'évènements associés) est plus spécifique qu'une séquence courte;
(c) si les modificateurs spécifiés dans un modèle sont un sous-ensemble des
modificateurs d'un autre modèle, alors le modèle avec le plus de modificateurs
est plus spécifique.
(d) un évènement virtuel dont le modèle physique correspond à la séquence est moins
spécifique que le même modèle physique qui n'est pas associés à un
évènement virtuel .
(e) si une séquence donnée correspond à deux ou plus évènements virtuels, un
des évènements virtuels sera choisi, mais l'ordre est indéfini.
Si les séquences correspondantes contiennet plus d'un évènement, alors les tests
(c)-(e) sont appliqués dans l'ordre du plus recent évènement au plus ancien. Si ces tests échouent à déterminer un gagnant, alors la séquence la plus récemment déclarée l'emporte.
S'il y a deux (ou plus) évènements virtuels déclenchés par la
même séquence, et qu'ils sont liés au même tag de fenêtre, alors seulement un des évènements virtuels sera déclenché, et il sera choisi au hasard:
event add <<Paste>> <Control-y>
event add <<Paste>> <Button-2>
event add <<Scroll>> <Button-2>
bind Entry <<Paste>> {puts Paste}
bind Entry <<Scroll>> {puts Scroll}
Si l'utilisateur tape Control-y, le binding<<Paste>>
sera appelé, mais si l'utilisateur presse le bouton2 alors un des deux bindings
<<Paste>> ou the <<Scroll>> sera
appelé, mais celui qui sera appelé exactement est indéfini.
Si un évènement X n'est associé à aucun binding existant , alors l'évènement est ignoré.
Un évènement non lié n'est pas considéré comme une erreur.
Quand une séquence spécifiée dans une commande bind contient
plus d'un modèle d'évènement, alors son script est exécuté quand bien même
les évènements récents (jusqu'à et incluant l'évènement courant )
correspondent à la séquence donnée. Ceci signifie, par exemple, que si le bouton1 est
cliqué répétitivement, la séquence <Double-ButtonPress-1> correspondra à chaque clic sauf le premier.
Si des évènements étrangers qui pourraient empêcher la correpondance se produisent au milieu
d'une séquence d'évènement alors les évènements étrangers sont
ignoré à moins que ce soient des évènements KeyPress ou ButtonPress.
Par exemple, <Double-ButtonPress-1> correspondra à une séquence d'appui
sur le bouton1, même s'il y a des évènements ButtonRelease
(et probablement des évènements Motion) entre les évènements
ButtonPress .
De plus, un évènement KeyPress peut être précédé par n'importe quel nombre
d'évènements KeyPress pour les touches modificatrices sans que les
ces touches modificatrices nuisent à la correspondance.
Par exemple, la séquence d'évènement aB correspondra à un appui sur la touche
a, le relachement de la touche a, un appui sur la touche Shift, et un appui sur la touche b : l'appui sur la toucheShift est
ignoré parceque c'est une touche modificatrice.
Finalement, si plusieurs évènements Motion se produisent, seul
le dernier est utilisé pour la correspondance avec des séquences de binding .
Si une erreur se produit pendant l'exécution du script pour un binding alors le
mécanisme bgerror est utilisé pour rapporter l'erreur.
La commande bgerror sera exécutée au niveau global
(en dehors du contexte de toute procedure Tcl).
bgerror, keysyms
form, manual
Copyright © 1990 The Regents of the University of California.
Copyright © 1994-1996 Sun Microsystems, Inc.
Copyright © 1998 by Scriptics Corporation.
Copyright © 1995-1997 Roger E. Critchlow Jr.
Copyright © 2003 - Le Portail Tcl/Tk Francophone.