2011-09-20 11 views
6

Ho un QListWidget e ho bisogno di rimuovere alcuni elementi.PyQt4 - Remove Item Widget from QListWidget

Da quello che ho cercato, questa è una cosa generalmente spiacevole da fare.

Ho letto una tonnellata di soluzioni, ma nessuna è applicabile al mio scenario specifico.
Al momento, ho solo i veri e propri oggetti oggetto da trattare; non i loro valori o indice.

Questo perché ottengo gli articoli (da rimuovere) tramite .selectedItems().

Ecco il codice:

ItemSelect = list(self.ListDialog.ContentList.selectedItems()) 

for x in range (0, len(ItemSelect)): 
    print self.ListDialog.ContentList.removeItemWidget(ItemSelect[x]) 

Questo non fa niente per niente, però.
Non genera un errore, ma gli elementi selezionati non vengono rimossi.
I metodi che ho visto per la rimozione di elementi richiedono l'indice o il nome dell'articolo, nessuno dei quali ho. Ho solo i veri widget.

Come li rimuovo?

Mi manca qualcosa?

sto usando:

Python 2.7.1
PyQt4 IDLE 1.8
Windows 7

risposta

12

takeItem() dovrebbe funzionare:

for SelectedItem in self.ListDialog.ContentList.selectedItems(): 
    self.ListDialog.ContentList.takeItem(self.ListDialog.ContentList.row(SelectedItem)) 
+0

ha funzionato un fascino! Avevo visto la soluzione comune era takeItem, ma non ero sicuro su come convertire il widget dell'oggetto in un indice. Grazie! –

2

Questo è strano, non v'è un certo modo diretto per eliminare gli elementi da QListWidget ... Prova questo:

listWidget = self.ListDialog.ContentList 
model = listWidget.model() 
for selectedItem in listWidget.selectedItems(): 
    qIndex = listWidget.indexFromItem(selectedItem) 
    print 'removing : %s' %model.data(qIndex).toString() 
    model.removeRow(qIndex.row()) 
+1

actuall c'è un metodo chiamato 'takeItem' (vedi altre risposte). Detto questo, è davvero strano che non sia chiamato 'removeItem'. – neuronet

5

Eliminazione di una voce dal ListWidget:

item = self.listWidget.takeItem(self.listWidget.currentRow()) 
item = None 
+0

Funziona bene per me .... – Cholavendhan

+0

funziona anche per me !!! –

+1

Il garbage collector non dovrebbe recuperare la memoria se l'oggetto "restituito" non è assegnato a nessuna variabile? Penso che "takeItem()" dovrebbe funzionare senza assegnare il suo output a nessuna variabile e quindi impostare quella variabile su "None". – nvd