2011-09-20 85 views
6

Tengo un QListWidget y necesito eliminar algunos elementos.PyQt4 - Eliminar Widget de artículo de QListWidget

Por lo que he investigado, esto es algo desagradable en general.

He leído una tonelada de soluciones, pero ninguna es aplicable a mi caso específico.
Por el momento, solo tengo los widgets de elementos reales para tratar; no sus valores o índice.

Esto se debe a que obtengo los artículos (es necesario eliminarlos) a través de .selectedItems().

Aquí está el código:

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

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

Esto no hace nada en absoluto, sin embargo.
No genera un error, pero los elementos seleccionados no se eliminan.
Los métodos que he visto para eliminar elementos requieren el índice o el nombre del elemento, ninguno de los cuales tengo. Solo tengo los widgets reales.

¿Cómo los elimino?

¿Echo de menos algo?

que estoy usando:

Python 2.7.1
PyQt4 IDLE 1,8
Windows 7

Respuesta

12

takeItem() debería funcionar:

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

¡Funcionó un encanto! Había visto que la solución común era takeItem, pero no estaba seguro de cómo convertir el widget de elementos en un índice. ¡Gracias! –

2

Eso es raro que no hay alguna manera directa a eliminar elementos de QListWidget ... Trate esto:

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 hay un método llamado 'takeItem' (ver otras respuestas). Dicho esto, es realmente extraño que no se llame 'removeItem'. – neuronet

5

Supresión de un elemento de ListWidget:

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

Funciona bien para mí .... – Cholavendhan

+0

funciona para mí también !!! –

+1

¿No debería el recolector de basura reclamar la memoria si el "elemento" devuelto no está asignado a ninguna variable? Creo que "takeItem()" debería funcionar sin asignar su salida a ninguna variable y luego establecer esa variable a "None". – nvd

Cuestiones relacionadas