我有一个具有以下属性的QListWidget实例:
self.listWidget.setSelectionMode(QtGui.QAbstractItemView.ExtendedSelection)
self.listWidget.setSelectionBehavior(QtGui.QAbstractItemView.SelectItems)
self.listWidget.setViewMode(QtGui.QListView.IconMode)
我希望只能通过点击它们而不是通过橡皮筋选择来选择最多3个项目。第四次单击应取消选择所有先前选定的项目并选择de current one。橡皮筋选择应该被禁用。
我做了类似这样的事情,我想要实现的功能有限:我必须返回所选项目的最多3 item.text()
列表。橡皮筋选择使用可能导致列表中的所有项目被选中并作为items.text()
列表返回。
myapp.listWidget.itemSelectionChanged.connect(icons_selected)
def icons_selected():
L = [item.text() for item in myapp.listWidget.selectedItems()]
if L.__len__() <= 2 :
myapp.listWidget. setSelectionMode(QAbstractItemView.ExtendedSelection)
if L.__len__() >= 3:
myapp.listWidget. setSelectionMode(QAbstractItemView.SingleSelection)
return L
橡皮筋选择无论如何都可以,我最终可以选择所有项目。这是我不想要的东西。
我可以通过操纵QAbstractItemView.NoSelection
解决这个问题,但我觉得它很混乱。
我宁愿使用类似setSelectionModel(QItemSelectionModel.NoUpdate)
的东西,但不知道如何使用它,无法弄明白。
所有项目的橡皮筋选择:不是我想要的
LE: 这就是我所做的:
self.listWidget.itemSelectionChanged.connect(self.get_selected_icons_list)
self.listWidget.itemDoubleClicked.connect(self.restore_selection)
......
def get_selected_icons_list(self):
....
else:
if icons_filename_list.__len__() <= 2:
self.listWidget.setSelectionMode(QAbstractItemView.ExtendedSelection)
if icons_filename_list.__len__() >= 3:
self.listWidget.setSelectionMode(QAbstractItemView.NoSelection)
if not icons_filename_list:
return None
else:
return icons_filename_list
def restore_selection(self, *args):
self.listWidget.setSelectionMode(QAbstractItemView.ExtendedSelection)
self.listWidget.clearSelection()
self.listWidget.setCurrentItem(args[0])