我正在使用wxPython,並得到了一些項目的樹。 現在我需要一個按名稱給我樹項目對象的函數。wxPython:TreeCtrl:如何通過名稱獲取樹項目?
例如: 項= self.GetItemByName( 「MyStories」)
我無法找到的文檔中這樣的功能。
有沒有人有任何想法?
我正在使用wxPython,並得到了一些項目的樹。 現在我需要一個按名稱給我樹項目對象的函數。wxPython:TreeCtrl:如何通過名稱獲取樹項目?
例如: 項= self.GetItemByName( 「MyStories」)
我無法找到的文檔中這樣的功能。
有沒有人有任何想法?
這裏有一種方法與特定的標籤,找到第一個樹項目:
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已經提供了一些工具,用於在填充樹時在樹項和其他對象之間創建引用的方式,並且字典查找比我剛纔輸入的要快得多和清晰。
是的,添加調用tree.AppendItem()返回一個wx.TreeItemId - 更容易跟蹤這些。 –
雖然robots.jpg答案將工作,但我找到一個更好的解決方案是跟蹤一個字典的ID,如以下(在通過@暗示robots.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
和再後來,當你需要查找的項目爲一個對象,你可以只搶tree_id
tree_id = self.tree_item_ids[obj.name]
data = self.tree.GetPyData(tree_id)
您也可以覆蓋TREECTRL和改變tree_ctrl_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
我不認爲節點包含名稱,只有標籤,所以你想獲得一個項目呢? –
你能給出一個你想要達到什麼樣的代碼嗎? – Bogdan