【问题标题】:Get current visible QListWidget items获取当前可见的 QListWidget 项
【发布时间】:2020-09-03 13:41:46
【问题描述】:

有没有办法让当前项目显示在 QListWidget 的可见区域中

我已经尝试过这个示例代码,但它只返回列表的第一项。

def get_visible_cameras(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)

【问题讨论】:

    标签: python pyqt pyqt5 qlistwidget qlistview


    【解决方案1】:

    任何在其定义中带有yield 的函数都将返回一个生成器。为了获取所有项目,您需要遍历此生成器,即执行类似

    for item in get_visible_cameras(listWidget):
        do_something_with(item)
    

    如果你只是想返回一个项目列表,你可以这样做:

    def get_visible_cameras(listWidget):
        rect = listWidget.viewport().contentsRect()
        top = listWidget.indexAt(rect.topLeft())
        result = []
        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):
                result.append(listWidget.item(index))
        return result
    

    【讨论】:

    • 嗨@Heike。它只返回 QlistWidget 的第一项。
    • 它适用于我构建的测试应用程序。如果没有您身边的minimal reproducible example,我无法提供更多建议。
    猜你喜欢
    • 2021-04-23
    • 1970-01-01
    • 2014-10-30
    • 2014-12-22
    • 1970-01-01
    • 1970-01-01
    • 2019-07-01
    • 2017-03-23
    • 2015-10-11
    相关资源
    最近更新 更多