2012-04-18 62 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)