PyQt4:如何迭代QListWidget中的所有项目

时间:2011-01-07 19:45:42

标签: python pyqt4 qlistwidget

目前,我在继承QtGui.QListWidget的类中使用以下while循环来迭代所有项目:

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

        i += 1

我希望我可以使用:

for item in self.items():

但items()方法需要一个QMimeData对象,我不知道如何构造以返回所有项目。是否有比上面的while循环更清晰的方法?

6 个答案:

答案 0 :(得分:18)

我不知道MIME类型是什么,我也找不到方便的方法。但你可以编写一个这样简单的方法并完成:

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

它甚至是懒惰的(发电机)。

答案 1 :(得分:11)

只是为了增加我的2美分,因为我正在寻找这个:

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

答案 2 :(得分:9)

我知道这已经过时了,但我在QListWidget中找到了一个函数findItems(text, Qt.MatchFlags)。所以,迭代所有项目:

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

使用item =)

做任何你需要的事情

答案 3 :(得分:7)

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

答案 4 :(得分:0)

就像其他人在这里寻求有关PyQt5的相同信息的说明一样,这里稍有不同。

作为上述PyQt4的用户Pythonic,您仍然可以使用以下方法直接为项目建立索引:

item_at_index_n = list_widget.item(n)

但是要获取要迭代的项目列表,请使用空字符串和MatchRegExp标志似乎不再起作用。

在PyQt5中执行此操作的一种方法是:

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

我仍在与PyQt保持联系,所以我可能还没有遇到过一种更简单/更简单/更优雅的方式。但我希望这会有所帮助!

答案 5 :(得分:0)

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

如果您希望获取项目文本

for item in items:
   print(item.text())