2012-01-12 68 views
0

我想知道如何覆蓋treectrl中的默認keysearch。如何覆蓋treectrl中的關鍵字搜索?

當我將方法綁定到EVT_TREE_KEY_DOWN事件並調用treectrl的selectItem方法時,它沒有任何效果。

這是我的樹:

測試< --root

-Aero OREA(EI)

-Blub(BL)

- 測試(AX)

-123(45)

-Blib(LOL)

我的意圖: 隨着keydown事件我串聯搜索字符串。當遍歷樹形結構時,我分割名稱以獲取括號內容(例如:「EI」,「BL」...)。 然後我檢查括號的內容是否以我的搜索字符串開頭。如果它是真的,則調用selectItem(TreeItemId)。但這是行不通的。似乎默認搜索仍然有效,並導致我的關鍵搜索問題。

class MeinTreeCtrl(wx.TreeCtrl): 

def __init__(self, parent): 
    wx.TreeCtrl.__init__(self, parent, -1) 
    root = self.AddRoot("test") 
    self.AppendItem(root, "Aero orea(EI)") 
    self.AppendItem(root, "Blub(BL)") 
    self.AppendItem(root, "Test(AX)") 
    self.AppendItem(root, "123(45)") 
    self.AppendItem(root, "Blib(LOL)") 
    self.searchString = "" 
    self.lastKeyDown = time.time() 

    parent.Bind(wx.EVT_TREE_KEY_DOWN, self.OnTreeKeySearch, self) 

def GetItem(self, match, root): 
    item = self.GetFirstChild(root) 
    while item.IsOk(): 
     tmp = self.GetItemText(item) 
     tmp = tmp.split(")") 
     tmp = tmp[len(tmp) - 2] 
     tmp = tmp.split("(") 
     tmp = tmp[len(tmp) - 1] 
     if tmp.startswith(match): 
      self.SelectItem(item) 
      break 
     item = self.GetNextChild(root, item) 
    return False 

def OnTreeKeySearch(self, event):   
    now = time.time() 
    if self.searchString == "": 
     self.searchString = chr(event.GetKeyCode()) 
    if (now - self.lastKeyDown) < 3: 
     self.searchString += str(chr(event.GetKeyCode())) 
    else: 
     self.searchString = str(chr(event.GetKeyCode())) 
    self.lastKeyDown = now 
    self.GetItem(self.searchString, self.GetRootItem()) 

你有什麼線索嗎?

謝謝你和問候 托馬斯

回答

0

搜索後,我發現我錯了幾天。 此行是問題:

parent.Bind(wx.EVT_TREE_KEY_DOWN, self.OnTreeKeySearch, self) 

首先我需要的只是EVT_KEY_DOWN沒有樹事件按下按鍵。 其次,我綁定的方法,我的父母不要自己(那是因爲我沒有複製粘貼& :()

這種說法是真的對我很有用:

事件的一個典型例子不傳播是wx.EVT_KEY_DOWN 只有發送到控制具有焦點,並不會 傳播到其父

- 。EventPropagation