我想知道如何在treectrl中覆盖默认的keysearch。
当我将方法绑定到EVT_TREE_KEY_DOWN事件并调用treectrl的selectItem方法时,它没有任何效果。
这是我的树:
测试< - root
-Aero orea(EI)
-Blub(BL)
-Test(AX)
-123(45)
-Blib(LOL)
我的意图: 使用keydown事件我连接搜索字符串。当遍历treeitems时,我拆分名称以获得括号的内容(例如:“EI”,“BL”......)。 然后我检查括号的内容是否以我的searchstring开头。如果为真,则调用selectItem(TreeItemId)。但这不起作用。似乎默认搜索仍在工作,并且导致我的keysearch出现问题。
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 :(得分:0)
经过几天的搜索,我发现了自己的错误。 这条线是问题所在:
parent.Bind(wx.EVT_TREE_KEY_DOWN, self.OnTreeKeySearch, self)
首先,我只需要EVT_KEY_DOWN
而不是树事件来关键。
其次我把方法绑定到我的父母而不是自己(那是因为我复制和粘贴:()
这句话对我非常有用:
未传播的事件的典型示例是wx.EVT_KEY_DOWN。 它仅发送给具有焦点的控件,而不会发送 传播给它的父母。