Вопрос

В настоящее время я использую следующее во время цикла в классе, который наследует Qtgui.qlistwidget для итерации всех предметов:

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

        i += 1

Я надеялся, что смогу использовать:

for item in self.items():

Но метод элементов () хочет, чтобы объект Qmimedata, который я не знаю, как построить, чтобы вернуть все элементы. Есть ли более чистый подход, чем мой петля выше?

Это было полезно?

Решение

Я не знаю, что это с типом MIME, и я тоже не мог найти удобный метод. Но вы можете написать простой метод, как это и сделать:

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

Это даже ленивый (генератор).

Другие советы

Просто добавить мои 2 цента, как я искал это:

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

Я знаю, что это старый, но я только что узнал функцию FinditTems (текст, Qt.matchflags) в Qlistwidget. Итак, чтобы повторить все предметы:

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

И делать все, что вам нужно с предметом =)

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

Так же, как записка для других приземляющихся здесь ищет ту же информацию о PYQT5, здесь немного отличается.

Как пользователь Питон Указано выше для PYQT4, вы все равно можете напрямую индексировать элемент, используя:

item_at_index_n = list_widget.item(n)

Но приобретать список предметов для итерации, используя пустую строку и флаг MatchregeXP, кажется, больше не работает.

Один из способов сделать это в PYQT5:

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

Я все еще доставляюсь, чтобы похваться с PYQT, поэтому вполне может быть легче / проще / более элегантный способ, которым я просто не наткнулся. Но я надеюсь, что это поможет!

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

Если ваше желание получить текст предметов

for item in items:
   print(item.text())
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top