Question

À l'heure actuelle, j'utilise la boucle while suivante dans une classe héritant QtGui.QListWidget pour itérer tous les éléments:

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

        i += 1

J'espérais que je pourrais utiliser:

for item in self.items():

mais la méthode des éléments () veut un objet QMimeData que je ne sais pas comment construire pour renvoyer tous les articles. Y at-il une approche plus propre que ma boucle while ci-dessus?

Était-ce utile?

La solution

Je ne sais pas ce qu'il est avec le type MIME soit, et je ne pouvais pas trouver une méthode pratique non plus. Mais vous pourriez écrire une méthode simple comme cela et être fait:

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

Il est même paresseux (un générateur).

Autres conseils

Juste pour ajouter mes 2 cents, comme je cherchais ceci:

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

Je sais que c'est vieux, mais je viens de découvrir une fonction findItems ( texte, Qt.MatchFlags) QListWidget. Donc, pour itérer tous les éléments:

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

Et faire tout ce que vous avez besoin avec l'élément =)

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

Tout comme une note pour les autres débarquant ici à la recherche d'informations sur les mêmes PyQt5, il est un peu différent ici.

En tant qu'utilisateur Pythonic indiqué ci-dessus pour PyQt4, vous pouvez indexer directement un élément en utilisant:

item_at_index_n = list_widget.item(n)

Mais pour acquérir une liste d'éléments pour l'itération, en utilisant une chaîne vide et le drapeau MatchRegExp ne semble pas fonctionner plus.

Une façon de le faire en PyQt5 est:

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

Je suis encore tout retourné par PyQt, donc il peut y avoir un moyen plus facile / simple / plus élégant que je tout simplement pas encore rencontré. Mais j'espère que cela aide!

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

Si votre désir d'obtenir le texte des éléments

for item in items:
   print(item.text())
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top