Tkinter テキスト ウィジェットでバインディングはどのように機能しますか?
Tkinter では、テキスト ウィジェットを操作するときに、キーストロークによって関連付けられたバインディングがトリガーされますウィジェットで。これらのバインドにより、入力時にテキストがどのように更新されるかが決まります。ただし、組み込みクラス バインディングを通じてテキスト更新が行われた後、独自のコードを実行したい場合があります。
舞台裏: バインド タグとイベント処理
Tkinter はバインド タグを利用してイベントを処理します。各ウィジェットには、ウィジェットと同じ名前のバインド タグがあり、他のバインド タグには、ウィジェットのクラス、ルート ウィンドウのパス、一般的な「all」タグが含まれます。ウィジェットには、最も具体的なもの (ウィジェット) から始まり、最も具体的なもの (すべて) で終わるイベントを順番に処理するバインド タグが割り当てられます。
バインド順序の問題の解決
クラス バインディングの後に自己定義イベントをバインドするには、バインド タグの順序を変更するか、新しいバインド タグを導入するという 2 つのオプションがあります。
オプション 1: バインド タグの再配置
バインド タグの順序を調整することで、クラス バインディングよりもカスタム バインディングのイベント処理を優先できます。たとえば、ウィジェットを表すバインド タグ (以下のコードの「entry1」) がある場合、それをバインド タグのリスト内のクラス バインド タグ (「Entry」) の下に移動します:
<code class="python">entry1.bindtags(('Entry', '.entry1', '.', 'all'))</code>
オプション 2: 新しいバインド タグの導入
または、クラス バインド タグに続く追加のバインド タグを作成することもできます。バインディングはこの新しいタグにアタッチされます。
<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>
コード例
次のコードは、これらの手法の使用法を示しています。
<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>
このコードを実行し、3 つのエントリ ウィジェットでキーを押すと、デフォルトのバインド順序により、最初のエントリ ウィジェットのバインドが 1 文字遅れているように見えることがわかります。ただし、2 番目と 3 番目のエントリ ウィジェットのバインドにより、入力時にテキストが正しく更新されます。
以上がTkinter のテキスト ウィジェットでテキストを更新した後にカスタム コードを実行するにはどうすればよいでしょうか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。