2012-01-12 2 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"...)의 내용을 가져옵니다. 그런 다음 대괄호의 내용이 내 searchstring으로 시작하는지 확인합니다. true 인 경우에는 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

감사합니다. 나는 아래로 키를 바로 EVT_KEY_DOWN되지 트리 이벤트를 필요

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

첫째 : 이 줄은 문제였다.

이벤트의 전형적인 예는 전파되지 : 둘째 나는

이 문을 나에게 정말 유용했다 (내가 & 붙여 넣기 :(복사했기 때문에 즉)하지 자체 내 부모에게 방법을 바인더 제본 wx.EVT_KEY_DOWN입니다 그것은 초점을 갖는 컨트롤 만 보내이며, 그 부모에게 전파되지 것

-.. EventPropagation

관련 문제