首页 > 解决方案 > 是否可以限制 QListWidget 使用户最多只能选择 3 个项目?

问题描述

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

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

import sys
from PyQt5.QtWidgets import QAbstractItemView, QApplication, QListWidget, QListWidgetItem, QVBoxLayout, QWidget

class Example(QWidget):

    def __init__(self):
        super().__init__()
        self.setGeometry(50,50,320,200)
        layout = QVBoxLayout(self)
        combo = QListWidget(self)
        combo.setSelectionMode(QAbstractItemView.MultiSelection)
        counter = 1
        while (counter < 21):
            combo.addItem(str(counter))
            counter = counter + 1
        layout.addWidget(combo)
        self.setWindowTitle("QListWidget")
        self.show()


if __name__ == '__main__':
    app = QApplication(sys.argv)
    ex = Example()
    ex.show()
    sys.exit(app.exec_())

我的示例代码显示了一个包含 20 个项目的列表。它具有多选集,因此用户可以选择多个但没有当前限制。

标签: pythonpyqtpyqt5qlistwidget

解决方案


好的,摘自此处找到的文档: https ://doc.qt.io/qtforpython/PySide2/QtWidgets/QAbstractItemView.html

声明如下:

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

其他几个功能与选择控制有关;例如 setSelectionMode() 和 setSelectionBehavior() 。这个类提供了一个默认的选择模型( selectionModel() ),但这可以通过使用 setSelectionModel() 和 QItemSelectionModel 的实例来替换

所以是的,有可能做到这一点(因为它与所有编码工作一样——一切皆有可能),上面说明了你只需要弄清楚你将如何实现它——可能需要使用 Behavior或者制作自己的模型


推荐阅读