【问题标题】:PyQt4: How do you iterate all items in a QListWidgetPyQt4:如何迭代 QListWidget 中的所有项目
【发布时间】:2011-01-07 19:45:42
【问题描述】:

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

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

        i += 1

我希望我可以使用:

for item in self.items():

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

【问题讨论】:

    标签: python pyqt4 qlistwidget


    【解决方案1】:

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

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

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

    【讨论】:

    • 谢谢!您对在这里使用 xrange 有何想法。
    • @majgis:我的一切手段,是的。在 Python 2 中,尽可能使用 xrange。只是我通常使用 Python 3,所以我倾向于在我的示例中编写 Python 3。
    【解决方案2】:

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

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

    【讨论】:

      【解决方案3】:

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

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

      【讨论】:

      【解决方案4】:
      items = []
      for index in xrange(self.listWidget.count()):
           items.append(self.listWidget.item(index))
      

      【讨论】:

        【解决方案5】:

        正如其他登陆这里寻求有关 PyQt5 相同信息的人的说明,这里略有不同。

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

        item_at_index_n = list_widget.item(n)
        

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

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

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

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

        【讨论】:

          【解决方案6】:
          items = []
          for index in range(self.listWidget.count()):
              items.append(self.listWidget.item(index))
          

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

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

          【讨论】:

            猜你喜欢
            • 2014-04-29
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2019-01-10
            • 1970-01-01
            • 2018-04-22
            • 2013-02-22
            相关资源
            最近更新 更多