2011-01-07 21 views
19

la actualidad, utilizo el siguiente bucle while en una clase que hereda QtGui.QListWidget para iterar todos los artículos:PyQt4: ¿Cómo iterar todos los artículos en un QListWidget

i = 0 
    while i < self.count(): 
     item = self.item(i) 

     i += 1 

que estaba esperando que podría utilizar:

for item in self.items(): 

pero el método items() quiere un objeto QMimeData que no sé cómo construir para devolver todos los elementos. ¿Hay un enfoque más limpio que mi ciclo while arriba?

Respuesta

18

No sé qué hay con el tipo MIME tampoco, y tampoco pude encontrar un método práctico. Pero podría escribir un método simple como este y estar listo:

def iterAllItems(self): 
    for i in range(self.count()): 
     yield self.item(i) 

Incluso es flojo (un generador).

+0

Gracias! ¿Cuáles son sus pensamientos sobre el uso de Xrange aquí? –

+2

@majgis: Mi todos los medios, sí. En Python 2, use xrange siempre que sea posible. Es solo que usualmente uso Python 3, así que me inclino a escribir Python 3 en mis ejemplos. – delnan

6

Sé que esto es viejo, pero acabo de encontrar una función findItems(text, Qt.MatchFlags) en QListWidget. Por lo tanto, para recorrer todos los elementos:

#listWidget is a QListWidget full of items 
all_items = listWidget.findItems('', QtCore.Qt.MatchRegExp) 
for item in all_items: 
    print item 

y hacer todo lo que necesita con el tema =)

7
items = [] 
for index in xrange(self.listWidget.count()): 
    items.append(self.listWidget.item(index)) 
7

Sólo para añadir mis 2 centavos, ya que estaba buscando para ello:

itemsTextList = [str(listWidget.item(i).text()) for i in range(listWidget.count())] 
Cuestiones relacionadas