Frage

Zur Zeit verwende ich die folgende while-Schleife in einer Klasse, die erbt QtGui.QListWidget zu Iterierte alle Elemente:

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

        i += 1

Ich hatte gehofft, ich könnte:

for item in self.items():

aber die Elemente () -Methode will ein QMimeData Objekt, das ich weiß nicht, wie alle Einzelteile zu konstruieren zurückzukehren. Gibt es einen sauberen Ansatz als meine while-Schleife oben?

War es hilfreich?

Lösung

Ich weiß nicht, was es mit dem MIME-Typ ist entweder, und ich konnte nicht eine bequeme Methode entweder finden. Aber man könnte eine einfache Methode wie folgt schreiben und getan werden:

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

Es ist sogar faul (ein Generator).

Andere Tipps

Just my 2 cents hinzuzufügen, wie ich war auf der Suche für diese:

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

Ich weiß, das ist alt, aber ich nur eine Funktion findItems fand heraus ( text, Qt.MatchFlags) in QListWidget. Also, iterieren alle Elemente:

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

Und tun, was Sie mit dem Einzelteil benötigen =)

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

Nur als Hinweis für andere hier landen die gleichen Informationen über PyQt5 suchen, es ist etwas anders hier.

Als Benutzer Pythonic oben für PyQt4 erwähnt, können Sie immer noch direkt Index ein Element mit:

item_at_index_n = list_widget.item(n)

Aber eine Liste der Elemente für Iteration zu erwerben, eine leere Zeichenfolge verwendet und die MatchRegExp Flagge scheint nicht mehr zu arbeiten.

Eine Möglichkeit, dies in PyQt5 zu tun ist:

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

Ich bin immer noch in dem Griff PyQt, so kann es gut sein, eine leichte / einfache / elegante Art und Weise, dass ich einfach noch nicht begegnet. Aber ich hoffe, das hilft!

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

Wenn Ihr Wunsch, den Text der Elemente erhalten

for item in items:
   print(item.text())
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top