0

このトピックに関する多くの情報を見てきましたが、この質問に対する正確な答えはありません。私はほとんどの逆の問題を抱えています。ボタンにフォーカスがあるときに Enter ボタンがボタンをクリックしないようにしたい。これを行うには、単純にボタンが Enter ボタンの押下を受け付けないようにするのではなく、コールバック メソッドで Enter ボタンの押下を条件付きでキャプチャしたいと考えています。現在、Python プログラムのすべてのウィジェットに次のイベントをバインドしています。

parent.Bind(wx.EVT_CHAR, self.CharInputCallback)

Enter ボタンが押されると EVT_CHAR イベントが実際にスローされ、コールバック メソッドでコールバックを取得できます。私の問題は、意図的にイベントをスキップしていないにもかかわらず(イベントを転送する)、ボタンを仮想的にクリックするという入力ボタンの機能がまだ機能していることです。これが起こっているので、コールバックメソッドがイベントを転送していないと確信しています(テキストボックスに移動する文字をキャプチャしてこれをテストしました)、入力ボタンがキャプチャしていない追加のイベントをスローすると思われます. 入力ボタンからの「仮想クリック」を防ぐために、追加の次のイベントをバインドしてキャプチャしようとしました。

parent.Bind(wx.EVT_TEXT_ENTER, self.CharInputCallback)
parent.Bind(wx.EVT_KEY_UP, self.CharInputCallback)
parent.Bind(wx.EVT_KEY_DOWN, self.CharInputCallback)

しかし、Enter キーを押すと、フォーカスのあるボタンがクリックされたままになります。要約すると、入力ボタンを押したときにスローされる追加のイベントはありますか? もしそうなら、特にどのイベントがボタンを「仮想的にクリック」していますか? 私が見つけたほとんどのフォーラムでは、入力ボタンが押されたことを認識する方法について議論していますが、ボタンがフォーカスされているときはそれを認識してデフォルトのアクションを無効にしたいと考えています。

4

2 に答える 2

0

これらすべてのイベントをさまざまなハンドラーにバインドしようとしましたが、EVT_BUTTON もバインドしました。EVT_BUTTON は、key および char イベントが発生する前に常に発生するようです。ボタンをクリックされたくない場合は、おそらくそれを無効にするか、別のウィジェット (おそらく汎用ボタンの 1 つ) を使用するか、独自のウィジェットを作成する必要があります。また、wxPython メーリング リストで提案があるかどうかを尋ねます。

私が知っている wxPython でイベントを順序付ける唯一の方法は、wx.CallAfter または wx.CallLater を使用することです。ただし、このコンテキストでそれをどのように使用するかはわかりません。

于 2012-11-20T15:33:24.887 に答える
0

Enter キーでボタンをクリックするイベントは、キーアップ イベントです。コールバックのコードが少し台無しになりました。キーアップ イベントをキャプチャし、それをスキップしないと、入力ボタンがフォーカスのあるボタンをクリックするのを防ぎます。とにかくWindows 7で。

于 2012-11-20T15:49:28.643 に答える