Maison > développement back-end > Tutoriel Python > Comment les commandes Bindtag affectent-elles le traitement des événements dans Tkinter ?

Comment les commandes Bindtag affectent-elles le traitement des événements dans Tkinter ?

Linda Hamilton
Libérer: 2024-12-03 14:40:13
original
820 Les gens l'ont consulté

How Do Bindtag Orders Affect Event Processing in Tkinter?

Bindtags et traitement des événements dans Tkinter

Dans Tkinter, le traitement des événements est géré via des bindtags, qui sont des identifiants associés aux widgets. Lorsqu'un événement se produit, Tkinter détermine le widget qui l'a intercepté et vérifie ses bindtags pour les liaisons correspondantes. Cependant, l'ordre des bindtags affecte la façon dont les événements sont traités.

Dans l'exemple fourni, trois entrées sont créées et liées au même événement de pression de touche. Initialement, leurs bindtags sont définis comme suit :

entry1.bindtags(('.entry1', 'Entry', '.', 'all'))
entry2.bindtags(('Entry', '.entry1', '.', 'all'))
entry3.bindtags(('.entry1','Entry','post-class-bindings', '.', 'all'))
Copier après la connexion

Dans les deux premiers cas, l'ordre est : le propre bindtag de l'entrée, Entry (la classe de toutes les entrées) et un bindtag générique pour tous les widgets. Dans le troisième cas, une liaison post-classe bindtag supplémentaire est incluse.

Lorsqu'un événement de pression de touche se produit :

  • entry1 :

    • La balise .entry1 correspond et déclenche sa liaison. Cependant, à ce stade, la valeur de l'événement (le caractère saisi) n'a pas été copiée dans le widget d'entrée, donc l'étiquette d'état ne l'affichera pas encore.
    • La balise Entry se déclenche ensuite, provoquant l'affichage du caractère. inséré dans le widget.
  • entry2 :

    • De la même manière que l'entrée1, la balise .entry1 se déclenche en premier, mais ne met pas à jour le widget.
    • Cependant, la balise Entry se déclenche avant la balise .entry1 dans ce cas, donc le caractère est inséré immédiatement dans le widget et l'étiquette d'état est mise à jour correctement.
  • entry3 :

    • Le même comportement lorsque Entry1 se produit : la balise .entry1 se déclenche et ne met pas à jour le widget.
    • La balise Entry n'est pas incluse dans ses bindtags list.
    • La balise post-class-bindings est rencontrée et sa liaison est exécutée avant toute autre liaison de classe. Dans ce cas, la liaison de classe pour l'entrée est toujours exécutée et insère le caractère dans le widget, mais comme elle se déclenche après la liaison post-class-bindings, le widget n'est mis à jour qu'après que la valeur de l'événement soit signalée.

Par conséquent, l'ordre des bindtags détermine quand la liaison de classe pour un widget est déclenchée. Dans les deux premiers cas, la liaison de classe se déclenche après la mise à jour de la valeur d'événement du widget, ce qui entraîne un décalage. Dans le troisième cas, la liaison de classe est exécutée avant toute autre liaison de classe, résolvant ainsi le problème de décalage.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal