是否可以有一个 QListWidget select 多个 setCurrentItems

Is it possible to have a QListWidget select multiple setCurrentItems

在 PyQt 中,我可以使用 QListWidget.setCurrentItem(item) 以编程方式让 QListWidget select 成为一个项目。当然,这将 select 我的 QListWidget 中的一个项目。

但是,我想知道是否存在像 setCurrentItems([item1, item2, item3]) 这样的方法,如果我给出一个列表,它将 select QListWidget 中与这些项目匹配的所有项目。

现在我目前的实施只允许我 select 一项。在这种情况下,项目 'data2'

index = ['data', 'data1', 'data2']
for i in index:
    matching_items = listWidget.findItems(i, QtCore.Qt.MatchExactly)
    for item in matching_items:
        listWidget.setCurrentItem(item)

如果能做到这样就好了。

index = ['data', 'data1', 'data2']
for i in index:
    matching_items.append(listWidget.findItems(i, QtCore.Qt.MatchExactly))
listWidget.setCurrentItems(matching_items)

QListWidget默认支持单选,你必须用setSelectionMode更改选择模式,你的情况是:

listWidget.setSelectionMode(QListWidget.MultiSelection)

如果要选择 QListWidgetItem,则必须使用 setSelected(True)

示例:

if __name__ == '__main__':
    app = QApplication(sys.argv)
    listWidget = QListWidget()

    listWidget.addItems(["data{}".format(i) for i in range(10)])

    listWidget.setSelectionMode(QListWidget.MultiSelection)
    index = ['data2', 'data3', 'data5']
    for i in index:
        matching_items = listWidget.findItems(i, Qt.MatchExactly)
        for item in matching_items:
            item.setSelected(True)

    listWidget.show()
    sys.exit(app.exec_())

除了 eyllanesc 的回答。您还可以选择:

listWidget.setSelectionMode(QtListWidget.ExtendedSelection)

这将让您按住 Ctrl 键来切换项目的选择 on/off。除此之外,您还可以按住 Shift 键在当前项目和单击的项目之间切换所有项目的选择。

如果你只想要Shift键选择功能而不需要Ctrl键选择切换功能,你可以使用:

listWidget.setSelectionMode(QtListWidget.ExtendedSelection)