PyQt4: Как вы повторяете все элементы в QListWidget?
В настоящее время я использую следующий цикл while в классе, который наследует QtGui.QListWidget для итерации всех элементов:
i = 0
while i < self.count():
item = self.item(i)
i += 1
Я надеялся, что смогу использовать:
for item in self.items():
но метод items() хочет объект QMimeData, который я не знаю, как построить для возврата всех элементов. Есть ли более чистый подход, чем мой цикл while?
Ответы
Ответ 1
Я тоже не знаю, что это такое с типом MIME, и я не мог найти удобный метод. Но вы можете написать простой метод, подобный этому, и сделать следующее:
def iterAllItems(self):
for i in range(self.count()):
yield self.item(i)
Это даже ленивый (генератор).
Ответ 2
items = []
for index in xrange(self.listWidget.count()):
items.append(self.listWidget.item(index))
Ответ 3
Просто чтобы добавить мои 2 цента, поскольку я искал это:
itemsTextList = [str(listWidget.item(i).text()) for i in range(listWidget.count())]
Ответ 4
Я знаю, что это старый, но я только что обнаружил функцию findItems (текст, Qt.MatchFlags) в QListWidget. Итак, чтобы перебрать все элементы:
#listWidget is a QListWidget full of items
all_items = listWidget.findItems('', QtCore.Qt.MatchRegExp)
for item in all_items:
print item
И сделайте все, что вам нужно, с элементом =)