繁体   English   中英

是否可以让QListWidget选择多个setCurrentItems

[英]Is it possible to have a QListWidget select multiple setCurrentItems

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

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

现在我当前的实现只允许我选择一个项目。 在这种情况下,项目'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键以打开/关闭项目的选择。 除此之外,您还可以按住Shift键切换当前项目和单击项目之间所有项目的选择。

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

listWidget.setSelectionMode(QtListWidget.ExtendedSelection)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM