2012-08-26 7 views
9

Sto trovando frustrantemente difficile trovare un modo semplice per eliminare il mio selezionato QTreeWidgetItem.Elimina QTreeWidgetItem in PyQt?

Il mio metodo patchwork comporta la definizione di selezione corrente dell'albero a current e poi:

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

Non è orribile, ma non c'è un comando che verso l'alto solo rimuove l'articolo?

+0

Credo che il tuo sia il modo corretto. In C++ puoi semplicemente cancellare l'oggetto, invocando quindi il suo distruttore, e questo rimuoverà l'oggetto dal widget. Ma non penso che ci sia un modo diretto per farlo da Python. – Avaris

risposta

10

La classe QTreeWidget ha una funzione invisibleRootItem(), che consente un approccio un po 'più ordinato:

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

PyQt4 utilizza SIP per generare i binding Python per le classi Qt, in modo da poter eliminare l'oggetto C++ in modo esplicito attraverso the sip python API:

import sip 
... 
sip.delete(current) 

Il generatore di binding per PySide, shiboken, ha a similar module.

+0

Nice +1. Non lo sapevo. – Avaris

+0

Lo userò in futuro, ma sono andato con l'altra risposta. Grazie comunque! – RodericDay