Python 是否可以限制QListWidget,以便用户最多只能选择3项?

Python 是否可以限制QListWidget,以便用户最多只能选择3项?,python,pyqt,pyqt5,qlistwidget,Python,Pyqt,Pyqt5,Qlistwidget,我知道您可以更改选择模式,从列表中选择多个项目。但是,更改为multiselection意味着用户可以选择选择列表中的所有项目。我想知道是否可以允许用户选择多个项目,但设置项目的最大数量,即用户可以从20个项目的列表中选择1-3个项目 我已经浏览了文档和各种问题,但看不到任何可以做到这一点的方法 导入系统 从PyQt5.QtWidgets导入QAbstractItemView、QApplication、QListWidget、QListWidgetItem、QVBoxLayout、QWidget

我知道您可以更改选择模式,从列表中选择多个项目。但是,更改为multiselection意味着用户可以选择选择列表中的所有项目。我想知道是否可以允许用户选择多个项目,但设置项目的最大数量,即用户可以从20个项目的列表中选择1-3个项目

我已经浏览了文档和各种问题,但看不到任何可以做到这一点的方法

导入系统 从PyQt5.QtWidgets导入QAbstractItemView、QApplication、QListWidget、QListWidgetItem、QVBoxLayout、QWidget 类示例SampleQWidget: 定义初始自我: 超级__ 自设几何50,50320200 布局=QVBoxLayoutself combo=QListWidgetself combo.setSelectionModeQAbstractItemView.MultiSelection 计数器=1 当计数器<21时: combo.addItemstrcounter 计数器=计数器+1 layout.addWidgetcombo self.setWindowTitleQListWidget 自我表现 如果uuuu name uuuuuu='\uuuuuuu main\uuuuuuu': app=QApplicationsys.argv ex=示例 脱口秀 sys.exitapp.exec_
我的示例代码显示20个项目的列表。它设置了multiselection,因此用户可以选择多个但没有当前限制。

好的,这里的文档摘录如下:

声明如下:

请注意,在显示小部件之前,范围不会更新

其他几个功能与选择控制有关;对于 示例setSelectionMode和setSelectionBehavior。这个班 提供用于selectionModel的默认选择模型, 但这可以通过在实例中使用setSelectionModel来替代 QItemSelectionModel的实现

因此,是的,所有的编码工作都有可能做到这一点-任何事情都有可能,上面说明了您只需要弄清楚如何实现它-可能需要使用行为或创建自己的模型

一种方法是将QListWidget子类化并覆盖selectionCommand,例如


这可能适用于类似的情况

list是example.ui中定义的QListWidget。将lenselected_items>3中的3更改为所需的任何值

ui_filename = "example.ui"
baseUIClass, baseUIWidget = uic.loadUiType(ui_filename)

class Example(baseUIWidget, baseUIClass):
    

    def __init__(self, parent=None):
        super(Example, self).__init__(parent)
        self.setupUi(self)
        self.list.itemSelectionChanged.connect(self.Enforce_Selection_Size)

    def Enforce_Selection_Size(self):
            selected_items = self.list.selectedItems()
            if len(selected_items) > 3:
                selected_items[3].setSelected(False)

哦,这很有道理!您知道是否也可以覆盖现有列表上的selectionCommand?
ui_filename = "example.ui"
baseUIClass, baseUIWidget = uic.loadUiType(ui_filename)

class Example(baseUIWidget, baseUIClass):
    

    def __init__(self, parent=None):
        super(Example, self).__init__(parent)
        self.setupUi(self)
        self.list.itemSelectionChanged.connect(self.Enforce_Selection_Size)

    def Enforce_Selection_Size(self):
            selected_items = self.list.selectedItems()
            if len(selected_items) > 3:
                selected_items[3].setSelected(False)