PyQT QListWidget:限制选择x项,禁用橡皮筋选择

时间:2017-10-26 08:28:12

标签: python python-3.x pyqt4 pyside

我有一个具有以下属性的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])

0 个答案:

没有答案