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

23

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

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

        i += 1
我希望我能使用:

for item in self.items():

但是items()方法需要一个QMimeData对象,我不知道如何构造它来返回所有项。除了我上面的while循环外,是否有更简洁的方法?

6个回答

27

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

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

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

谢谢!你认为在这里使用xrange怎么样? - Michael Allan Jackson
2
@majgis:我的意思是,是的。在Python 2中,尽可能使用xrange。只是我通常使用Python 3,所以我倾向于在我的示例中编写Python 3。 - user395760

14

仅仅想补充我的两分钱,当我正在寻找这个:

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

12

我知道这个可能有点老了,但我刚发现在 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

然后您可以根据需要对该项进行任何操作 =)


2
你也可以在这里找到其他的Qt.MatchFlag参数:http://pyqt.sourceforge.net/Docs/PyQt4/qt.html#MatchFlag-enum - Sludge
我需要使用Qt.MatchWildcard。 - user3711502

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

6

对于那些寻找有关PyQt5的同类信息的其他用户,需要注意这里略有不同。

正如用户Pythonic在上面提到的PyQt4一样,您仍然可以直接使用索引来访问一个项目:

item_at_index_n = list_widget.item(n)

但是,使用空字符串和MatchRegExp标志获取迭代项列表似乎不再起作用。
在PyQt5中实现此目的的一种方法是:
all_items = list_widget.findItems('*', PyQt5.Qt.MatchWildcard)

我仍在努力掌握PyQt,所以可能有一种更简单/更优雅的方法,但我还没有找到。但我希望这可以帮到你!

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

如果您希望获取物品的文本

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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接