2012-08-26 42 views
9

Me resulta frustrantemente difícil encontrar una manera simple de eliminar mi QTreeWidgetItem seleccionado.¿Eliminar QTreeWidgetItem en PyQt?

Mi método consiste en fijar mosaico selección actual del árbol para current y luego:

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

No es horrible, pero no hay un comando que hacia arriba sólo elimina el artículo?

+0

Creo que la suya es la correcta. En C++, simplemente puede eliminar el elemento, por lo tanto, invocando su destructor, y eso eliminará el elemento del widget. Pero no creo que haya una forma directa de hacerlo desde Python. – Avaris

Respuesta

10

La clase QTreeWidget tiene una función invisibleRootItem() que permite un enfoque algo más ordenado:

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

PyQt4 utiliza SIP para generar los enlaces de Python para las clases de Qt, por lo que puede eliminar el objeto de C++ de forma explícita a través the sip python API:

import sip 
... 
sip.delete(current) 

El generador vinculante para PySide, shiboken, tiene a similar module.

+0

Niza +1. No lo sabía. – Avaris

+0

Usaré esto en el futuro, pero fui con la otra respuesta. ¡Gracias! – RodericDay