2011-07-06 13 views
0

FocusOutイベントがLinux上で動作しない理由を知っていますか?Tcl/TkウィジェットとFocusOutがLinux上で期待通りに動作しない

私は1つの有効なテキストボックスと3つの無効なコンボボックスを持っています。 私は3つのコンボボックスを有効または無効にするprocを呼び出すFocusOutイベントでテキストボックスをバインドします。

Windowsでは完全に動作します。しかし、このアクションがLinux上で行われた場合、FocusOutイベントを引き起こすようには見えません。一つの奇妙なことは、ボタンをクリックすると、FocusOutイベントが発生したようです。

私のコンボボックスが無効になっている可能性がありますか? しかし、Windows上ではなぜ動作しますか?

私は本当に誰かが私を助けてくれることを願っています。

ありがとうございます。

+0

明確にするために、フォーカス(キーボードがテキストを送信する場所)やカーソルがウィジェット上にあるかどうかを本当に心配していますか? ''イベントをトリガするためにあなたは何をしていますか?タブキーへの特別なバインディング、他のエントリやテキストウィジェットをクリックしますか?そして、確かに、あなたはテキストウィジェットまたはエントリーウィジェットについて話していますか(「テキストボックス」という名前のウィジェットはありません)? –

+0

私は、入力ウィジェットのいくつかの入力の後にユーザーがコンボボックスまたはテキストウィジェットをクリックしたときに心配です。したがって、私はイベントを使用しています。 – Mich

答えて

1

私はこれまで、いくつかのウィンドウマネージャーがボタンをクリックするたびにTkから一時的にフォーカスを奪ったことを確認していました。私はこれがキーイベント処理の仕方と関係があると考えていますが、現時点では確認できません(OSX上で、と異なる)。複雑さのために、<FocusOut>にバインドするとすぐに<FocusIn>イベントが発生するかどうかを確認する必要があります。ボタンの無効状態の更新を行う前に少し余分な遅延(例えば0.1秒)が掛かることはない。

それとも、おそらくこのように、entry widget validation engineをオフに無効に行うためのコードをハングアップすることができます:

​​

検証インタフェースは、古いスタイルentryと新しいスタイルttk::entryウィジェットの両方で同じです。スピンボックスでもサポートされています。 doButtonEnableDisableからブール値trueを返す必要があるか、またはエントリの変更を拒否することに注意してください。コードでエラーが発生しないように注意してください。ドキュメントには注意が必要なものがリストされています。

+0

私は2番目の提案を試みましたが、残念ながらそれはLinuxでもうまくいきません。これは、入力ウィジェットをにバインドするときと同じように動作します。一方、が私のエントリーウィジェットにバインドされているとき、私は呼び出したいprocを呼び出します。 理由は何ですか? ありがとう=) – Mich

関連する問題