Maison > Article > développement back-end > Comment pouvez-vous exécuter du code personnalisé après la mise à jour du texte dans le widget Texte de Tkinter ?
Comment fonctionnent les liaisons dans le widget de texte Tkinter ?
Dans Tkinter, lorsque vous interagissez avec un widget de texte, vos frappes déclenchent les liaisons associées avec le widget. Ces liaisons déterminent la manière dont le texte est mis à jour au fur et à mesure que vous tapez. Cependant, il existe des cas où vous souhaiterez peut-être exécuter votre propre code après que des mises à jour de texte ont eu lieu via des liaisons de classe intégrées.
Dans les coulisses : liaison des balises et gestion des événements
Tkinter utilise des balises de liaison pour gérer les événements. Chaque widget possède une balise de liaison portant le même nom que le widget, et d'autres balises de liaison incluent la classe du widget, le chemin de la fenêtre racine et la balise générale « tout ». Les widgets se voient attribuer des balises de liaison qui traitent les événements dans l'ordre, en commençant par le plus spécifique (widget) et en terminant par le moins spécifique (tous).
Résoudre le problème d'ordre de liaison
Pour lier des événements auto-définis après les liaisons de classe, vous avez deux options : réorganiser les balises de liaison ou introduire une nouvelle balise de liaison.
Option 1 : Réorganiser les balises de liaison
En ajustant la séquence des balises de liaison, vous pouvez donner la priorité au traitement des événements de vos liaisons personnalisées par rapport aux liaisons de classe. Par exemple, si vous avez une balise de liaison représentant le widget ("entry1" dans le code ci-dessous), déplacez-la sous la balise de liaison de classe ("Entry") dans la liste des balises de liaison :
<code class="python">entry1.bindtags(('Entry', '.entry1', '.', 'all'))</code>
Option 2 : introduction d'une nouvelle balise de liaison
Vous pouvez également créer une balise de liaison supplémentaire qui suit la balise de liaison de classe. Vos liaisons seront alors attachées à cette nouvelle balise :
<code class="python">entry3.bindtags(('.entry3','Entry','post-class-bindings', '.', 'all')) # Custom bindings are attached to the 'post-class-bindings' tag entry3.bind_class("post-class-bindings", "<KeyPress>", OnKeyPress)</code>
Exemple de code
Le code suivant illustre l'utilisation de ces techniques :
<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") entry1.bindtags(('.entry1', 'Entry', '.', 'all')) entry2.bindtags(('Entry', '.entry2', '.', 'all')) entry3.bindtags(('.entry3','Entry','post-class-bindings', '.', 'all')) # Custom bindings are attached to the default tags entry1.bind("<KeyPress>", OnKeyPress) # Custom bindings are attached to the reordered tags entry2.bind("<KeyPress>", OnKeyPress) # Custom bindings are attached to the new 'post-class-bindings' tag entry3.bind_class("post-class-bindings", "<KeyPress>", OnKeyPress) root.mainloop()</code>
En exécutant ce code et en appuyant sur les touches des trois widgets d'entrée, vous remarquerez que les liaisons du premier widget d'entrée semblent être en retard d'un caractère en raison de l'ordre de liaison par défaut. Cependant, les liaisons pour les deuxième et troisième widgets d'entrée mettent à jour le texte correctement au fur et à mesure que vous tapez.
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!