我想知道如何覆蓋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())
你有什麼線索嗎?
謝謝你和問候 托馬斯