23

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

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

        i += 1

我希望我可以使用:

for item in self.items():

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

4

6 回答 6

23

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

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

它甚至是懒惰的(生成器)。

于 2011-01-07T20:05:53.390 回答
13

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

itemsTextList =  [str(listWidget.item(i).text()) for i in range(listWidget.count())]
于 2015-12-27T10:24:00.497 回答
11

我知道这很旧,但是我刚刚在 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

对物品做任何你需要的事情=)

于 2011-11-08T01:45:26.623 回答
7
items = []
for index in xrange(self.listWidget.count()):
     items.append(self.listWidget.item(index))
于 2011-12-02T07:44:03.820 回答
5

正如其他人在这里寻求有关 PyQt5 的相同信息的注释一样,这里略有不同。

正如上面针对 PyQt4 的用户Pythonic所述,您仍然可以使用以下方法直接索引项目:

item_at_index_n = list_widget.item(n)

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

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

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

我仍在掌握 PyQt,所以很可能有一种更简单/更简单/更优雅的方式,我根本还没有遇到过。但我希望这会有所帮助!

于 2018-11-08T08:07:33.440 回答
2
items = []
for index in range(self.listWidget.count()):
    items.append(self.listWidget.item(index))

如果您希望获取项目的文本

for item in items:
   print(item.text())
于 2018-11-19T23:16:54.330 回答