如何设置默认()?

时间:2012-09-07 12:57:24

标签: wxpython

我是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)

我想在默认情况下将焦点设置在“确定”按钮上,这样“输入”-Key将执行此按钮。我已经尝试添加这一行:

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键时,我必须引用这个编辑行。

1 个答案:

答案 0 :(得分: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()