在PyQt中,我可以让QListWidget使用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)
答案 0 :(得分:4)
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_())
答案 1 :(得分:0)
除了eyllanesc的答案。您还可以选择:
listWidget.setSelectionMode(QtListWidget.ExtendedSelection)
这将使您按住Ctrl
键可以切换项目的选择开/关。除此之外,您还可以按住Shift
键在当前项目和单击的项目之间切换所有项目的选择。
如果只希望使用Shift
键选择功能,而不想要Ctrl
键选择切换功能,则可以使用:
listWidget.setSelectionMode(QtListWidget.ExtendedSelection)