Pregunta

Actualmente, utilizo el siguiente bucle while en una clase que hereda QtGui.QListWidget para recorrer todos los elementos:

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

        i += 1

Tenía la esperanza de que podría utilizar:

for item in self.items():

pero los elementos () de un objeto quiere QMimeData la que no sé cómo construir para devolver todos los artículos. ¿Hay un enfoque más limpio que mi bucle while anterior?

¿Fue útil?

Solución

No sé lo que es con el tipo MIME o bien, y no podía encontrar un método de conveniencia tampoco. Sin embargo, se podría escribir un método simple como esto y por hacer:

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

Es incluso perezoso (un generador).

Otros consejos

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

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

Sé que esto es viejo, pero, acabo de descubrir una función findItems ( texto, 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 lo que necesita con el tema =)

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

Así como una nota para otros aterrizaje aquí en busca de la misma información sobre PyQt5, es un poco diferente aquí.

Pythonic establecido anteriormente para PyQt4, todavía puede directamente índice de un elemento utilizando:

item_at_index_n = list_widget.item(n)

Pero para adquirir una lista de artículos para la iteración, usando una cadena vacía y la bandera MatchRegExp no parece que trabajar más.

Una forma de hacer esto en PyQt5 es:

all_items = list_widget.findItems('*', PyQt5.Qt.MatchWildcard)

Todavía estoy Tener el control de PyQt, por lo que bien puede ser una manera más fácil / simple / más elegante que simplemente no he encontrado todavía. Pero espero que esto ayude!

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

Si su deseo de obtener el texto de los artículos

for item in items:
   print(item.text())
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top