1

私の質問は、Text ウィジェットが使用されているthis one に関連しています。

ただし、私の場合、エントリウィジェットですべて選択を再バインドしたいと考えています。

Ctrl+wを使用して入力フィールドのすべての入力を選択できるようにする次のことを試しました。

self.frmSearch = Frame()
self.txtSearch = Entry(self.frmSearch, bd=1, width=35)
self.txtSearch.bind('<Control-w>',lambda e: self.txtSearch.select_range(0, END))

ただし、Ctrl+wCtrl+に変更するaと、これは機能しなくなり、テキストは選択されません。誰かが理由を説明していますか?

4

1 に答える 1

4

これは、ウィジェット クラスではなくウィジェットにバインディングを配置しているためです。デフォルトでは、ウィジェットのバインディングの後にクラスのバインディングが起動します。

Tkinter がイベントを処理する方法は、最初にウィジェットにバインディングがあるかどうかを確認し、次にクラスに、次にトップレベル ウィンドウに、最後に特別なクラス「all」にバインディングがあるかどうかを確認することです。いわば、イベントのチェーンを壊さない限り、イベントは順番に処理されます。そのため、control-w バインディングが発生しますが、クラスのバインディングが発生し、バインディングで行ったことを効果的に元に戻します。

最善の解決策は、1) ラムダを使用せず、代わりに実際のメソッドまたは関数を使用し、2) クラスと他のバインディングが起動しないようにする "return 'break'" を行うことです。または、特定のエントリ ウィジェットだけでなく、アプリケーション内のすべてのエントリ ウィジェットにこのバインドを適用する場合はbind_class、クラス名を指定して使用し'Entry'ます。

質問で言及している質問には、クラスバインディングを変更する例を示す回答があります。

于 2012-07-09T15:30:43.460 に答える