4

次の方法を使用して、wxpythontreectrlのすべてのノードを反復処理しています。

 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にするために、同じアクションをよりコンパクトに実行する別の方法はありますか?

4

3 に答える 3

5

条件に一致するかどうかをチェックする、この関数内 (その名前空間のみ) にある関数を使用できます。アイテムが返されない場合は、続行します。

whileそうしないと、ラインの直後に状態を確認できます。このようにして、item変数はループの前に最初の子によって定義され、他の変数と同様に評価されます。

さらに別の方法: (または 2 つの組み合わせ)

(child, cookie) = self.GetFirstChild(item)
while child.IsOk():
    do_something(child)
     (child, cookie) = self.GetNextChild(item, cookie)
于 2012-04-18T08:19:12.150 に答える