PyQt4: как вы перебираете все элементы в QListWidget - PullRequest
19 голосов
/ 07 января 2011

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

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

        i += 1

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

for item in self.items():

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

Ответы [ 6 ]

18 голосов
/ 07 января 2011

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

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

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

11 голосов
/ 27 декабря 2015

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

itemsTextList =  [str(listWidget.item(i).text()) for i in range(listWidget.count())]
9 голосов
/ 08 ноября 2011

Я знаю, что это старый, но я только что обнаружил функцию findItems (text, Qt.MatchFlags) в QListWidget. Итак, чтобы перебрать все элементы:

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

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

7 голосов
/ 02 декабря 2011
items = []
for index in xrange(self.listWidget.count()):
     items.append(self.listWidget.item(index))
0 голосов
/ 20 ноября 2018
items = []
for index in range(self.listWidget.count()):
    items.append(self.listWidget.item(index))

Если вы хотите получить текст предметов

for item in items:
   print(item.text())
0 голосов
/ 08 ноября 2018

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

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

item_at_index_n = list_widget.item(n)

Но чтобы получить список элементов для итерации, использование пустой строки и флага MatchRegExp, похоже, больше не работает.

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

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

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

...