2012-02-27 38 views
1

私はwxTreeCtrlを書いていました。私は65〜90の間のキーコード(Ascii:A-Z)のみを扱いたいと思っていました。 そして私は他のキーコードを自分で処理したくありません。私が65と90の間のキーを処理した後、どのように私のイベントを中止し、wxTreeCtrlの標準の "キーダウン"イベントを使用することができますか?wxPythonでのKeyDownイベントのオーバーライド

クラス定義:

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文でExceptionを発生させると、ツリーは私のように動作します。イベント処理を中止する必要があるようです。 – Thomas

+1

これでevent.Skipの後に戻ることができます。 –

+0

ありがとうございます。今はうまくいきます;) – Thomas

関連する問題