【问题标题】:How to override the key search in a treectrl?如何覆盖treectrl中的键搜索?
【发布时间】:2012-01-12 14:43:02
【问题描述】:

我想知道如何覆盖 treectrl 中的默认键搜索。

当我将一个方法绑定到EVT_TREE_KEY_DOWN事件并调用treectrl的selectItem方法时,它没有任何作用。

这是我的树:

测试

-航空矿(EI)

-Blub(BL)

-测试(AX)

-123(45​​)

-Blib (LOL)

我的意图: 通过 keydown 事件,我连接了一个搜索字符串。在遍历树项时,我拆分名称以获取括号的内容(例如:“EI”、“BL”...)。 然后我检查括号的内容是否以我的搜索字符串开头。如果为真,则调用 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()) 

你有什么线索吗?

谢谢你和最好的问候 托马斯

【问题讨论】:

    标签: events wxpython keydown


    【解决方案1】:

    经过几天的搜索,我发现了我的错误。 这行是问题所在:

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

    首先我只需要EVT_KEY_DOWN 而不是按键的树事件。 其次,我将方法绑定到我的父母而不是自我(那是因为我做了复制和粘贴:()

    这句话对我真的很有用:

    不传播事件的典型示例是 wx.EVT_KEY_DOWN。 它只发送到有焦点的控件,不会 传播到其父级。

    -- EventPropagation

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多