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 回答