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
Libérer: 2024-11-04 07:21:02
original
960 Les gens l'ont consulté

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>
Copier après la connexion

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>
Copier après la connexion

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>
Copier après la connexion

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
À propos de nous Clause de non-responsabilité Sitemap
Site Web PHP chinois:Formation PHP en ligne sur le bien-être public,Aidez les apprenants PHP à grandir rapidement!