Maison  >  Article  >  développement back-end  >  Comment puis-je m'assurer que mes liaisons de widget de texte Tkinter personnalisées s'exécutent après les liaisons intégrées ?

Comment puis-je m'assurer que mes liaisons de widget de texte Tkinter personnalisées s'exécutent après les liaisons intégrées ?

Susan Sarandon
Susan Sarandonoriginal
2024-11-04 07:21:02961parcourir

How Can I Ensure My Custom Tkinter Text Widget Bindings Execute After Built-in Bindings?

Liaison d'événements personnalisés dans le widget de texte Tkinter après les liaisons intégrées

Comprendre le problème

Dans le widget Texte de Tkinter, vous pouvez rencontrer une situation dans laquelle vos liaisons d'événements personnalisées sont exécutées avant les liaisons intégrées du widget, provoquant des écarts dans les mises à jour du texte.

Solution

Pour résoudre ce problème, vous pouvez modifier l'ordre dans lequel les événements sont traités. Les widgets Tkinter se voient attribuer une hiérarchie de "bindtags" qui déterminent l'ordre d'exécution de la liaison.

1. Réorganisation des Bindtags

L'ordre par défaut des bindtags est : widget, classe, niveau supérieur, tous. Vous pouvez modifier l'ordre en plaçant le bindtag du widget après le bindtag de la classe. De cette façon, les liaisons de classe s'exécuteront avant les liaisons de widgets.

<code class="python"># Modify the bindtags to rearrange the order
entry.bindtags(('Entry', '.entry', '.', 'all'))</code>

2. Présentation de Bindtags supplémentaires

Vous pouvez également créer un nouveau bindtag après le bindtag de classe et lier vos événements personnalisés à cette nouvelle balise.

<code class="python"># Create a new bindtag "post-class-bindings" after the class bindtag
entry.bindtags(('.entry','Entry','post-class-bindings', '.', 'all'))

# Bind your custom events to "post-class-bindings"
entry.bind_class("post-class-bindings", "<KeyPress>", OnKeyPress)</code>

Avantages des deux approches

  • Réorganisation des Bindtags : Affecte toutes les liaisons sur le widget.
  • Introduction de nouveaux Bindtags : Permet la liaison sélective d'événements en fonction sur la commande bindtag.

Exemple de code

Le code suivant illustre les deux approches :

<code class="python">import Tkinter

def OnKeyPress(event):
    value = event.widget.get()
    string="value of %s is '%s'" % (event.widget._name, value)
    status.configure(text=string)

root = Tkinter.Tk()

entry1 = Tkinter.Entry(root, name="entry1")
entry2 = Tkinter.Entry(root, name="entry2")
entry3 = Tkinter.Entry(root, name="entry3")

# Three different bindtags
entry1.bindtags(('.entry1', 'Entry', '.', 'all'))
entry2.bindtags(('Entry', '.entry2', '.', 'all'))
entry3.bindtags(('.entry3','Entry','post-class-bindings', '.', 'all'))

# Bind the first two entries to the default bind tags
entry1.bind("<KeyPress>", OnKeyPress)
entry2.bind("<KeyPress>", OnKeyPress)

# Bind the third entry to the "post-class-bindings" bind tag
entry3.bind_class("post-class-bindings", "<KeyPress>", OnKeyPress)

# ... Continue with your GUI code
</code>

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!

Déclaration:
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