如何按名称获取树项目?

2024-09-25 02:33:22 发布

您现在位置:Python中文网/ 问答频道 /正文

我用的是wxPython,有一棵树,上面有一些东西。 现在我需要一个按名称给我树项对象的函数。在

例如: 项目=self.GetItemByName(“密室”)

我在文档中找不到这样的函数。在

有人有什么想法吗?在


Tags: 项目对象函数文档self名称wxpython密室
3条回答

同时机器人.jpg答案会起作用,但我发现更好的解决方案是在dict中跟踪id,如下所示(由@机器人.jpg&;@Steven Sproat)

self.tree_item_ids = {}
root = self.tree.GetRootItem()
for obj in objs_to_add:
    tree_id = self.tree.AppendItem(root,obj.name)
    self.tree_item_ids[obj.name] = tree_id

然后,当你需要查找某个对象的条目时,你只需抓取树的id

^{pr2}$

以下是查找第一个具有特定标签的树项的方法:

def get_item_by_label(self, tree, search_text, root_item):
    item, cookie = tree.GetFirstChild(root_item)

    while item.IsOk():
        text = tree.GetItemText(item)
        if text.lower() == search_text.lower():
            return item
        if tree.ItemHasChildren(item):
            match = self.get_item_by_label(tree, search_text, item)
            if match.IsOk():
                return match
        item, cookie = tree.GetNextChild(root_item, cookie)

    return wx.TreeItemId()

result = get_item_by_label(tree, 'MyStories', tree.GetRootItem())
if result.IsOk():
    print('We have a match!')

但是根据你在树中显示的内容,可能有一种更简单的方法来处理它。TreeCtrl已经提供了在填充树时在树项和其他对象之间创建引用的工具,dict查找比我刚才输入的要快得多,看起来更干净。在

您也可以重写TreeCtrl并用self更改tree\u ctrl\u instance

def GetItemByName(self, search_text, tree_ctrl_instance):
        retval = None
        root_list = [tree_ctrl_instance.GetRootItem()]
        for root_child in root_list:
            item, cookie = tree_ctrl_instance.GetFirstChild(root_child)
            while item.IsOk():
                if tree_ctrl_instance.GetItemText(item) == search_text:
                    retval = item
                    break
                if tree_ctrl_instance.ItemHasChildren(item):
                    root_list.append(item)
                item, cookie = tree_ctrl_instance.GetNextChild(root_child, cookie)
        return retval

相关问题 更多 >