2016-06-29 6 views
1

QTreeWidgetItemの子を削除するにはどうすればいいですか?時々それはすべての項目を削除し、時にはそれを削除しません。QTreeWidgetItemの子を削除するには

子アイテムを正しく削除する方法。ここで

は私の機能QWidgetItem.removeChild

の子項目の削除を実行すると、新しい子アイテムにドキュメント内

def update_children_cont(self,subDirs,parent): 
    new_dir = subDirs 
    for i in range(parent.childCount()): 
     parent.removeChild(parent.child(i)) 
    print "child count should be 0",parent.childCount() 
    parent.addChildren(self.tree_list_generator(new_dir)) 

を追加することが子供で示される特定の項目を削除しています。 が削除されたは、が削除されたになりません。

は、それはあなたがそれらを反復処理しながら、項目を削除しようとしているので、あなたの例では動作しませんremoved item will not be deleted

答えて

1

によって何を意味しています。各アイテムが削除されると、他のアイテムは下に移動します。したがって、中間点が通過すると、ループは無効なインデックスを与えることになります。

の項目を逆順で削除すると簡単に修正できます。こうすることで、各項目を除去した後、彼らがどこにある他の項目が滞在し、すべてのインデックスが有効なままになります:

for i in reversed(range(parent.childCount())): 
     parent.removeChild(parent.child(i)) 

ドキュメントに関するご他の質問については:removeChild方法は削除さ

アイテムが渡されますが、呼び出し元はそのメモリを解放する必要があります。もちろん、Pythonガベージコレクタは通常あなたのためにそれを行います。そのため、ドキュメントの側面はC++ユーザーにとってより関連しています。

+0

実際に私は今、愚かな気がするが、なぜ私はそれを考えなかったのか分からない – Harwee