2012-04-18 24 views
2

我正在使用以下方法遍歷wxpython treectrl的所有節點。Wxpython:TreeCtrl:在樹上迭代

def get_desired_parent(self, name, selectednode = None): 
    if selectednode == None: 
     selectednode = self.treeCtrl.RootItem 
    # First perform the action on the first object separately 
    childcount = self.treeCtrl.GetChildrenCount(selectednode, False) 
    if childcount == 0: 
     return None 

    (item,cookie) = self.treeCtrl.GetFirstChild(selectednode) 
    if self.treeCtrl.GetItemText(item) == name: 
     return item 

    while childcount > 1: 
     childcount = childcount - 1 
    # Then iterate over the rest of objects 
     (item,cookie) = self.treeCtrl.GetNextChild(item,cookie) 
     if self.treeCtrl.GetItemText(item) == name: 
      return item 
    return None 

當我迭代地在結構內迭代時,這個額外代碼的問題變得更加明顯。 是否有另一種方式以更緊湊的方式執行相同的操作,以使我的代碼更加簡潔/ pythonic。

回答

2

你可以使用這個函數(僅在其名稱空間中)來檢查它是否與條件匹配。如果它沒有返回,則繼續。

否則,您可以檢查您的條件後while線。通過這種方式,item變量將由循環前的第一個孩子定義,並像其他任何一個進行評估。

又一方式:(或兩者的混合物)

(child, cookie) = self.GetFirstChild(item) 
while child.IsOk(): 
    do_something(child) 
    (child, cookie) = self.GetNextChild(item, cookie)