bind

 

bind - Associe des scripts Tcl avec les événements d'interface graphique


SYNTAXE

 bind tag
 bind tag séquence
 bind tag séquence script
 bind tag séquence +script

INTRODUCTION


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.


MODELES D'EVENEMENTS


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 additionnelle type, detail) identifiant 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.


MODIFICATEURS


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 à spécifier 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.


TYPES D’ÉVÉNEMENTS


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 plates-formes 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 plates-formes Macintosh et Windows. Nous vous donnons ici un peu plus de détails 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 plates-formes 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 apparaître dans le futur. Le signe de la valeur détermine 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 relâchement d'un bouton, dans le second il se réfère à un autre bouton qui est déjà 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>.


SCRIPTS DE LIAISON ET SUBSTITUTIONS


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 remplaçant chaque %, et le caractère suivant, par l'information de l’événement courant. Le remplacement dépend 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 relâché. Valide seulement pour les événements ButtonPress 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énements Enter, 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énements Enter et Leave .

%h Le champ height de l’événement. Valide pour les événements Configure et Expose .

%k Le champ keycode de l’événement. Valide seulement pour les événements KeyPress 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énements Enter, 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énements Circulate .

%s Le champ state de l’événement. Pour les événements ButtonPress, 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énements KeyPress 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énement MouseWheel. La valeur delta représente 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 représente 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énements KeyPress 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 'ButtonPressJL


Catégorie Manuel Tcl/Tk