28

我有一个QListWidget带有几个信号和插槽连接的常规。一切都按我的预期工作。我可以更新、检索、清除等。

但 UI 不支持多选。

如何“启用”多项选择QListWidget?我对 PyQt 的有限经验告诉我,我需要QListWidget通过子类化来创建自定义 .. 但是接下来呢?

Google 给了我 C++ 的答案,但我正在寻找 Python

http://www.qtforum.org/article/26320/qlistwidget-multiple-selection.html

http://www.qtcentre.org/threads/11721-QListWidget-multi-selection

4

5 回答 5

31

不幸的是,我对 Python 特定的语法无能为力,但您不需要创建任何子类。

创建之后,使用传入的多种选择类型之一进行QListWidget调用,这可能是您想要的。您可能想要查看此模式的一些变体。setSelectionMode()QAbstractItemView::ExtendedSelection

在您的itemSelectionChanged()信号槽中,调用selectedItems()以获取一个QList指针QListWidgetItem

于 2010-10-24T18:28:52.440 回答
27

对于 PyQT4 它是

QListWidget.setSelectionMode(QtGui.QAbstractItemView.ExtendedSelection)
于 2014-06-03T18:19:16.437 回答
10

使用多项选择在 listWidget 中获取多个选定值的示例。

from PyQt5 import QtWidgets, QtCore
class Test(QtWidgets.QDialog):
    def __init__(self, parent=None):
        super(Test, self).__init__(parent)
        self.layout = QtWidgets.QVBoxLayout()
        self.listWidget = QtWidgets.QListWidget()
        self.listWidget.setSelectionMode(
            QtWidgets.QAbstractItemView.ExtendedSelection
        )
        self.listWidget.setGeometry(QtCore.QRect(10, 10, 211, 291))
        for i in range(10):
            item = QtWidgets.QListWidgetItem("Item %i" % i)
            self.listWidget.addItem(item)
        self.listWidget.itemClicked.connect(self.printItemText)
        self.layout.addWidget(self.listWidget)
        self.setLayout(self.layout)

    def printItemText(self):
        items = self.listWidget.selectedItems()
        x = []
        for i in range(len(items)):
            x.append(str(self.listWidget.selectedItems()[i].text()))

        print (x)

if __name__ == "__main__":
    import sys
    app = QtWidgets.QApplication(sys.argv)
    form = Test()
    form.show()
    app.exec_()

输出 :-

在此处输入图像描述

于 2018-08-29T15:37:50.123 回答
4

使用 PyQt5,您可以使用以下方法设置 QListWidget 的 SelectionMode 以允许多项选择:

from PyQt5 import QtWidgets    


QtWidgets.QListWidget.setSelectionMode(2)

在哪里

  • SelectionMode = 0 => 无选择
  • SelectionMode = 1 => SingleSelection
  • SelectionMode = 2 => 多选
  • SelectionMode = 3 => 扩展选择
  • SelectionMode = 4 => ContiguousSelection

参考

在 Qt Creator 中,您可以在此处找到此选项: 在此处输入图像描述

于 2020-06-18T14:42:16.423 回答
3

此外,您可以使用列表推导来获取所选项目,例如

num_ITEMS=[item.text() for item in self.listWidget.selectedItems()]
于 2020-06-04T21:31:01.667 回答