Domanda

Al momento, io uso il seguente ciclo while in una classe che eredita QtGui.QListWidget per iterare tutti gli articoli:

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

        i += 1

Speravo che potrei usare:

for item in self.items():

, ma le voci () Metodo vuole un oggetto QMimeData, che io non so come costruire per restituire tutti gli elementi. Esiste un approccio più pulito rispetto al mio ciclo while sopra?

È stato utile?

Soluzione

Non so che cosa è con il tipo MIME sia, e non sono riuscito a trovare un metodo comodo sia. Ma si potrebbe scrivere un metodo semplice come questo e da fare:

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

E 'ancora pigro (un generatore).

Altri suggerimenti

Giusto per aggiungere i miei 2 centesimi, mentre ero alla ricerca di questo:

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

So che questo è vecchio ma, ho appena scoperto una funzione findItems ( il testo, Qt.MatchFlags) in QListWidget. Così, per scorrere tutti gli elementi:

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

E fare tutto ciò che è necessario con la voce =)

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

Proprio come una nota per gli altri l'atterraggio qui cercano le stesse informazioni su PyQt5, è un po 'diverso qui.

Come utente Pythonic detto sopra per PyQt4, è ancora possibile direttamente indice una voce utilizzando:

item_at_index_n = list_widget.item(n)

Ma per acquisire un elenco di elementi per l'iterazione, utilizzando una stringa vuota e la bandiera MatchRegExp non sembra funzionare più.

Un modo per fare questo in PyQt5 è:

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

Sono ancora alle prese con PyQt, quindi non ci può ben essere un / più semplice / modo più elegante più facile che io semplicemente non ho incontrato ancora. Ma spero che questo aiuta!

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

Se il vostro desiderio di ottenere il testo degli elementi

for item in items:
   print(item.text())
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top