2012-02-27 25 views
1

我寫wxTreeCtrl,我只希望65和90(ASCII:A-Z)之間的處理鍵碼。 我不想自己處理任何其他鍵碼。我處理65和90之間的鑰匙後,我怎麼能放棄我的事件,並使用標準「鍵按下」 -event爲wxTreeCtrl?重寫keydown事件在wxPython中

類定義:

class ConfigTreeCtrl(wx.TreeCtrl): 

方法結合:

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

方法定義:

def OnKeyDown(self, event):   
    now = time.time() 
    keyCode = event.GetKeyCode() 
    if (keyCode >= 65 and keyCode <= 90) or (keyCode >= 48 and keyCode <= 57): 
     if self.searchString == "": 
      self.searchString = chr(event.GetKeyCode()) 
     elif (now - self.lastKeyDown) < 2: 
      self.searchString += str(chr(event.GetKeyCode())) 
     else: 
      self.searchString = str(chr(event.GetKeyCode())) 
    self.lastKeyDown = now 
    self.GetItem(self.searchString, self.GetRootItem()) 

感謝您的幫助和問候

托馬斯

回答

1

event.Skip()處理事件進一步無論是在鹼的wxWindows類或天然控制。所以在你的方法應該這樣的事情應該介紹:

def OnKeyDown(self, event):   
    now = time.time() 
    keyCode = event.GetKeyCode() 
    if (keyCode >= 65 and keyCode <= 90) or (keyCode >= 48 and keyCode <= 57): 
     if self.searchString == "": 
      self.searchString = chr(event.GetKeyCode()) 
     elif (now - self.lastKeyDown) < 2: 
      self.searchString += str(chr(event.GetKeyCode())) 
     else: 
      self.searchString = str(chr(event.GetKeyCode())) 
    else: 
     event.Skip() 
     return 
    self.lastKeyDown = now 
    self.GetItem(self.searchString, self.GetRootItem()) 
+0

我已經試過這個。當我輸入字符時,選擇更改正常工作。但是當我按下箭頭鍵時,會出現一個非常奇怪的行爲。當我在else語句中引發異常時,樹的行爲就像我想要的那樣。看來我必須中止我的事件處理。 – Thomas 2012-02-27 10:52:41

+1

然後你可以event.Skip後只返回,看到編輯 – 2012-02-28 03:59:40

+0

非常感謝。現在它工作正常;) – Thomas 2012-02-28 07:24:17