Tkinter のテキスト ウィジェットでテキストを更新した後にカスタム コードを実行するにはどうすればよいでしょうか?

DDD
リリース: 2024-11-03 20:03:29
オリジナル
756 人が閲覧しました

How can you execute custom code after text updates in Tkinter's Text widget?

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 サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート
私たちについて 免責事項 Sitemap
PHP中国語ウェブサイト:福祉オンライン PHP トレーニング,PHP 学習者の迅速な成長を支援します!