Ordre de liaison des événements dans le widget de texte Tkinter
Lors de la liaison d'événements à un widget de texte Tkinter, il est important de prendre en compte l'ordre dans lequel les liaisons sont traité. Par défaut, les liaisons du widget sont traitées en premier, suivies des liaisons de classe.
Problème : la liaison se produit avant le changement de contenu
Le problème décrit dans la question se produit lorsque le la liaison automatique est appelée avant la liaison du widget Texte. Dans ce cas, la liaison du widget modifie le contenu du texte, ce qui déclenche l'auto-reliure trop tôt.
Solution : modifier l'ordre de liaison
Il existe plusieurs façons d'ajuster la ordre contraignant pour résoudre ce problème.
Conséquences des changements d'ordre de liaison
Réorganisation des Bindtags :
Présentation d'un Bindtag supplémentaire :
Exemple de code
Le code ci-dessous illustre les deux approches pour ajuster l'ordre de liaison :
<code class="python">import tkinter as tk def on_keypress(event): txt = event.widget.get('1.0', 'end') status['text'] = f"The value in the text widget is {txt}." root = tk.Tk() # Widget with default bindtags text1 = tk.Text(root, height=5, width=30) text1.pack() # Widget with reversed bindtags text2 = tk.Text(root, height=5, width=30) text2.bindtags(('Text', '.text2', '.', 'all')) text2.pack() # Widget with additional bindtag text3 = tk.Text(root, height=5, width=30) text3.bindtags(('.text3', 'Text', 'post-class-bindings', '.', 'all')) text3.pack() # Label showing the value in the text widgets status = tk.Label(root, justify="left") status.pack() # Bind to <KeyPress> event text1.bind('<KeyPress>', on_keypress) text2.bind('<KeyPress>', on_keypress) text3.bind_class('post-class-bindings', '<KeyPress>', on_keypress) root.mainloop()</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!