[英]PyQt4: How do you iterate all items in a QListWidget
目前,我在继承 QtGui.QListWidget 的类中使用以下 while 循环来迭代所有项目:
i = 0
while i < self.count():
item = self.item(i)
i += 1
我希望我可以使用:
for item in self.items():
但是 items() 方法需要一个 QMimeData 对象,我不知道如何构造它以返回所有项目。 有没有比上面的 while 循环更干净的方法?
我也不知道 MIME 类型是什么,我也找不到方便的方法。 但是你可以写一个像这样的简单方法并完成:
def iterAllItems(self):
for i in range(self.count()):
yield self.item(i)
它甚至是懒惰的(生成器)。
只是为了添加我的 2 美分,因为我正在寻找这个:
itemsTextList = [str(listWidget.item(i).text()) for i in range(listWidget.count())]
我知道这是旧的,但是,我刚刚在 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
并使用该项目做任何您需要的事情 =)
items = []
for index in xrange(self.listWidget.count()):
items.append(self.listWidget.item(index))
正如其他人在这里寻求有关 PyQt5 的相同信息的说明一样,这里略有不同。
正如上面针对 PyQt4 的用户Pythonic所述,您仍然可以使用以下方法直接索引项目:
item_at_index_n = list_widget.item(n)
但是要获取用于迭代的项目列表,使用空字符串和 MatchRegExp 标志似乎不再起作用。
在 PyQt5 中执行此操作的一种方法是:
all_items = list_widget.findItems('*', PyQt5.Qt.MatchWildcard)
我仍在掌握 PyQt,所以很可能有一种我还没有遇到过的更简单/更简单/更优雅的方法。 但我希望这会有所帮助!
items = []
for index in range(self.listWidget.count()):
items.append(self.listWidget.item(index))
for item in items:
print(item.text())
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.