Tkinter テキスト ウィジェットのイベント バインディング順序
イベントを Tkinter テキスト ウィジェットにバインドするときは、バインディングの順序を考慮することが重要です。加工された。デフォルトでは、ウィジェットのバインディングが最初に処理され、続いてクラス バインディングが処理されます。
問題: コンテンツの変更前にバインディングが発生する
質問で説明されている問題は、自己バインディングは、テキスト ウィジェットのバインドの前に呼び出されます。この場合、ウィジェットのバインディングによってテキスト コンテンツが変更され、自己バインディングのトリガーが早すぎます。
解決策: バインド順序を変更する
この問題を解決するには、バインド順序を変更します。
バインド順序変更の影響
バインドタグの再配置:
追加のバインドタグの紹介:
コード例
以下のコードは、バインド順序を調整する 2 つの方法を示しています。
<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>
以上がTkinter テキスト ウィジェットでバインド順序を制御するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。