Удалить QTreeWidgetItem в PyQt?

Я нахожу это удручающе трудно найти простой способ, чтобы удалить выбранный QTreeWidgetItem.

мой метод пэчворка включает в себя установку текущего выбора дерева в current и затем:

if current.parent() is not None:
   current.parent().removeChild(current)
else:
   self.viewer.takeTopLevelItem(self.viewer.indexOfTopLevelItem(current))

это не ужасно,но разве нет команды, которая просто удаляет элемент?

2 ответов


на QTreeWidget классе invisibleRootItem() функция, которая позволяет несколько более аккуратный подход:

root = tree.invisibleRootItem()
for item in tree.selectedItems():
    (item.parent() or root).removeChild(item)

PyQt4 использует sip для создания Привязок python для классов Qt, поэтому вы можете удалить объект C++ явно через API питона sip:

import sip
...
sip.delete(current)

генератор привязки для PySide, shiboken, имеет подобный модуль.