1

私はwxpythonを初めて使用しますが、(大きな)指定されたコードを編集する必要があります。

bsButtons = wx.BoxSizer(wx.HORIZONTAL)
self.cmdOk = wx.Button(self, label=_(u"Ok"))
self.cmdOk.Bind(wx.EVT_BUTTON, self.OnOk)
bsButtons.Add(self.cmdOk,
              border=4,
              flag=wx.RIGHT)
self.cmdCancel = wx.Button(self, label=_(u"Abbrechen"))
self.cmdCancel.Bind(wx.EVT_BUTTON, self.OnCancel)
bsButtons.Add(self.cmdCancel)

..。

def OnOk(self, event):
    self.EndModal(wx.ID_OK)
def OnCancel(self, event):
    self.EndModal(wx.ID_CANCEL)

デフォルトで「OK」ボタンにフォーカスを設定したいので、「Enter」キーでこのボタンを実行します。私はすでにこの行を追加しようとしました:

self.cmdOk.SetDefault()

しかし、これはうまくいきませんでした。(エラーはありませんが、Enterキーを押しても効果はありませんでした)私を助けてくれる人はいますか?ありがとう!

編集:私は以下を挿入しました:

self.Bind(wx.EVT_KEY_DOWN, self.on_key_down)

...

    def on_key_down(self, event):
        if event.GetKeyCode() == wx.WXK_RETURN:
            self.EndModal(wx.ID_OK)
        else:
            event.Skip()

しかし、これは機能しません。足りないものがあります。最初の行は次のようになっている必要があります。

self.button.Bind(wx.EVT_BUTTON, self.OnButton)

しかし、私の場合、「ボタン」が何であるかわかりませんか?!

Edit2:最後に動作します:

self.etcFormula.Bind(wx.EVT_KEY_DOWN, self.on_key_down)

etcFormulaは、私が話していた編集行です(焦点はどこにありますか)。これで、Enterボタンをキャッチしたいときに、この編集行を参照する必要があることがわかりました。

4

1 に答える 1

2

呼び出しself.cmdOk.SetFocus()はそれを行う必要があります。

編集:

テキストフィールドを介して入力を処理する場合は、にバインドされたこれらの行に沿ってハンドラーを追加できますwx.EVT_KEY_DOWN

def on_key_down(event):
    if event.GetKeyCode() == wx.K_RETURN:
        self.EndModal(wx.ID_OK)
    else:
         event.Skip()
于 2012-09-07T13:06:45.230 に答える