【问题标题】:PyQt4: How can I get a list of the visible items of a QlistWidget?PyQt4:如何获取 QlistWidget 的可见项目列表?
【发布时间】:2025-06-13 04:05:02
【问题描述】:

我正在尝试为 QlistWidget 中的项目动态加载(在其他线程中,因此它不会阻塞)不同的图标。但是列表很大,所以我只对加载那个精确时间显示的项目的图标感兴趣。 有没有办法获取 QlistWidget 的可见项目列表?

谢谢

【问题讨论】:

    标签: pyqt4 visible qlistwidget


    【解决方案1】:

    获取可视区域顶部和底部的索引,然后遍历它们包含的索引范围:

    def visibleItems(listwidget):
        rect = listwidget.viewport().contentsRect()
        top = listwidget.indexAt(rect.topLeft())
        if top.isValid():
            bottom = listwidget.indexAt(rect.bottomLeft())
            if not bottom.isValid():
                bottom = listwidget.model().index(listwidget.count() - 1)
            for index in range(top.row(), bottom.row() + 1):
                yield listwidget.item(index)
    

    【讨论】:

      【解决方案2】:

      虽然我得到了更好的方法,但我发现了一种丑陋的方法:

      rectangle = parent.geometry()    
      midx = rectangle.left() + (( rectangle.right() - rectangle.left()) / 2)    
      y=rectangle.top()
      itemlist = []
      while y < rectangle.bottom():
          y +=  10 # random value just to not check every pixel.
          item = parent.itemAt(midx, y)
          if item not in itemlist and item is not None:                
              itemlist.append(item)  
      

      更好的解决方案?

      【讨论】: