PYQT4:您如何迭代Qlistwidget中的所有项目
-
08-10-2019 - |
题
当前,我在继承qtgui.qlistwidget的类中使用以下循环循环来迭代所有项目:
i = 0
while i < self.count():
item = self.item(i)
i += 1
我希望我可以使用:
for item in self.items():
但是项目()方法需要一个qmimedata对象,我不知道该如何构建以返回所有项目。是否有比上面的循环更干净的方法?
解决方案
我也不知道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())]
我知道这很旧,但是我刚刚发现了一个功能 finditems(文本,qt.matchflags) 在qlistwidget中。因此,要迭代所有项目:
#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的相同信息的注释一样,这里的情况略有不同。
作为用户 Pythonic 在上述PYQT4上,您仍然可以使用以下方式直接索引一个项目:
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())
不隶属于 StackOverflow