PyQt4: Come si fa a iterare tutti gli elementi in un QListWidget
-
08-10-2019 - |
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?
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())