ホームページ >バックエンド開発 >Python チュートリアル >Tkinter のバインドタグの順序がイベント値の可視性に影響を与えるのはなぜですか?

Tkinter のバインドタグの順序がイベント値の可視性に影響を与えるのはなぜですか?

DDD
DDDオリジナル
2024-12-06 02:12:11410ブラウズ

Why Does Bindtag Order in Tkinter Affect Event Value Visibility?

Tkinter のバインドタグについて

Tkinter を使用する場合、バインドタグはイベント処理において重要な役割を果たします。質問で述べたように、バインドタグの順序はイベント値の可視性に影響を与える可能性があります。この動作が発生する理由を調べてみましょう。

Tkinter では、イベントがトリガーされると、システムはイベントを受信したウィジェットに関連付けられたさまざまなバインド タグにアタッチされたバインディングをチェックします。デフォルトでは、これらのバインド タグには、ウィジェット自体、そのクラス、およびいくつかのグローバル タグが含まれます。

最初のケース: デフォルトのバインドタグ

エントリ ウィジェットにデフォルトのバインドタグを使用する場合、順序は ('.entry1', 'Entry', '.', 'all') です。これは、次のことを意味します。

  1. イベントは、最初にウィジェット ('.entry1') に関連付けられたバインド タグに対してチェックされます。
  2. バインディングが見つからない場合は、バインド タグをチェックします。ウィジェットのクラス ('Entry')。
  3. それでも一致するバインドがない場合は、一般的なバインド タグ ('.') とグローバルに進みます。 binding tag ('all').

Issue: この場合、イベント値は、event.widget.get( を使用して取得されるため、関数定義には表示されません) )。関数が呼び出されるまでに、クラス バインディングはすでに実行されており、イベント値 (この例では文字「x」) がウィジェットに挿入されています。

2 番目のケース: 変更済みBindtags

2 番目のケースでは、3 番目のエントリ ウィジェットのバインドタグの順序が次のように変更されます。 ('.entry1','Entry','post-class-bindings', '.', 'all').

  • 'post-class-bindings' バインドタグがグローバルの前に追加されます。
  • これは、イベントが最初にウィジェットのバインドタグに対してチェックされることを意味します('.entry1').
  • バインディングが見つからない場合は、クラスのバインドタグ ('Entry') をチェックします。
  • それでも一致するバインディングがない場合は、「post-class-」に進みます。バインディング'、ここで変更された動作が発生します。
  • 重要: イベントの値が取得されます。この段階では、クラス バインディングが実行されてウィジェットに文字が挿入される前です。
  • したがって、値はまだ利用可能です。

以上がTkinter のバインドタグの順序がイベント値の可視性に影響を与えるのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。