gtk.TreeStore (pyGTK 2.10) の 2 つのインスタンスを使用して、2 つのドロップダウン メニュー ComboBox ウィジェットを作成しています。それらをdeviceおよびcommandと呼びます。デバイスComboBoxで選択された値によって、コマンドComboBox で使用できる値が異なります。コマンドの選択が行われると、デバイスとコマンドの選択の組み合わせを使用して、より多くの作業が行われます (他の可能なパラメーターの表示など)。
通常、次のようなことが起こるはずです。
- デバイスウィジェットのモデルの入力と設定
- Connectデバイスハンドラ (「changed」イベント用)
- Connectコマンドハンドラ (「changed」イベント用)
- デバイスウィジェットを表示
- コマンドウィジェットを表示
- 選択を待ちます
- プロセスデバイスの選択、コマンドウィジェットのモデルのクリア/入力
- プロセスコマンドの選択
- 6へ
ここで、#8 の途中で、ユーザーが非常に高速に戻って別のデバイスを選択し、その 2 番目のデバイス選択イベントが処理される前に、別のコマンドを選択します(最初のデバイス選択から入力されます)。2 番目のコマンド選択イベントは、2 番目のデバイス選択イベントが処理された後に有効でなくなる可能性があるコンテキストで受信されます。
デバイス選択処理で次のようなことを行うのがベスト プラクティスです。
- コマンドウィジェットを非表示にする
- イベント キューをクリアします (保留中のすべてのイベントで gtk.gdk.event_get() を呼び出し、進行するにつれて解放します)
- コマンドウィジェットをクリア
- [再]コマンドウィジェットのモデルを作成する
- コマンドウィジェットを表示
または、別のよりエレガントな方法はありますか? つまり、強制的に発生させることができる自動イベントパージはありませんよね?