1

LinuxでFocusOutイベントが機能しない理由を知っている人はいますか?

1 つの有効なテキスト ボックスと 3 つの無効なコンボ ボックスがあります。テキスト ボックスを FocusOut イベントにバインドし、3 つのコンボボックスを有効または無効にする proc を呼び出します。

Windowsで完全に動作します。ただし、このアクションが Linux で実行されると、FocusOut イベントがトリガーされないようです。奇妙なことの 1 つは、ボタンをクリックすると、FocusOut イベントがトリガーされるように見えることです。

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

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

前もって感謝します。

4

1 に答える 1

1

私は過去に、一部のウィンドウ マネージャが、ボタンをクリックするたびに一時的に Tk からフォーカスを奪ってから元に戻すことを観察しました。これはキーイベント処理の仕組みに関係していると思われますが、現時点では確認できません (OSX を使用しているため、状況が異なります)。複雑であるため、 にバインドする場合は、直後にイベント<FocusOut>を取得するかどうかも確認することをお勧めします。<FocusIn>ボタンの無効ステータスの更新を行う前に少し余分な遅延 (たとえば 0.1 秒) があっても問題ありません。

または、おそらく次のように、エントリ ウィジェットの検証エンジンを無効にするコードをハングアップすることもできます。

.e configure -validation focusout -validatecommand doButtonEnableDisable

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

于 2011-07-06T13:01:09.603 に答える