2012-09-07 66 views
1

我是新來的wxPython,但我有編輯(大)定的代碼:Howto SetDefault()?

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」-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是我說的是編輯行(其中重點是)。所以現在我明白了,當我想要捕捉輸入按鈕時,我必須引用此編輯行。

+1

'button'只會是'wx.Button'類的實例,所以你的情況'self.cmdOk'和'self.cmdCancel'是等價的,但你已經爲這些如此定義的處理器我不太確定你現在想做什麼? – redrah

+0

我想我沒有解釋清楚:重點在編輯線上,但是當我按下「Enter」鍵時,「OnOk」命令將被執行。比較我的第二次編輯。 – Munchkin

回答

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() 
+0

謝謝,這個作品! – Munchkin

+0

Ups,抱歉,那不是我想要的。對不起,我解釋錯了:焦點不應該在我的確定按鈕上 - 焦點應該在編輯線(它已經在那裏)。但是當我按下回車鍵(即使焦點在編輯行上),「OK」按鈕也應該執行。 – Munchkin

+0

嗯,那麼焦點只能在一個地方,所以在你的情況下,必須是文本字段。我已經添加了一個編輯到我的答案,應該這樣做。 – redrah