2011-01-07 2 views
19

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

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

     i += 1 

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

for item in self.items(): 

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

ответ

18

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

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

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

+0

Спасибо! Что вы думаете об использовании xrange здесь. –

+2

@majgis: Мое средство, да. В Python 2 используйте xrange, когда это возможно. Просто я использую Python 3, поэтому я, как правило, пишу Python 3 в своих примерах. – delnan

6

Я знаю, что это старый, но я только что обнаружил функцию 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
items = [] 
for index in xrange(self.listWidget.count()): 
    items.append(self.listWidget.item(index)) 
7

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

itemsTextList = [str(listWidget.item(i).text()) for i in range(listWidget.count())] 
Смежные вопросы