Подтвердить что ты не робот

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?

4b9b3361

Ответ 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

И сделайте все, что вам нужно, с элементом =)