2016-06-29 5 views
1

Как удалить детей из QTreeWidgetItem. Иногда он удаляет все предметы, а иногда нет.Как удалить детей из QTreeWidgetItem

Как правильно удалить дочерние элементы.

Вот моя функция выполняет удаление дочерних элементов и добавление новых дочерних элементов

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)) 

в документации для QWidgetItem.removeChild

Удаляет данный элемент указывает ребенку. удалены предмет не будет удален.

что это значит по removed item will not be deleted

ответ

1

Ваш пример не работает, потому что вы пытаетесь удалить элементы во время прохода над ними. После того как каждый элемент будет удален, остальные будут двигаться вниз. Поэтому, как только точка полутока передается, цикл начнет давать недопустимые индексы.

Вы можете исправить это, удалив товары в обратном направлении. Таким образом, после того, как каждый элемент будет удален, другие предметы будут оставаться там, где они есть, и все показатели будут оставаться в силе:

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

Как для другого вопроса о Документах

Метод removeChild удаляет элемент, который передается, но для вызывающего абонента требуется освободить память. Конечно, сборщик мусора python обычно сделает это за вас, так что аспект документов более уместен для пользователей C++.

+0

На самом деле я сейчас чувствую себя глупо, я не знаю, почему я не думал об этом – Harwee

Смежные вопросы