QListWidget and Multiple Selection

Viewed 45904

I have a regular QListWidget with couple of signals and slots hookedup. Everything works as I expect. I can update, retrieve, clear etc.

But the UI wont support multiple selections.

How do I 'enable' multiple selections for QListWidget? My limited experience with PyQt tells me I need to create a custom QListWidget by subclassing .. but what next?

Google gave me C++ answers but I'm looking for Python

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

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

5 Answers

Example of getting multiple selected values in listWidget with multiple selection.

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_()

output :-

enter image description here

Using PyQt5 you can set the SelectionMode of your QListWidget to allow multiple selections by using:

from PyQt5 import QtWidgets    


QtWidgets.QListWidget.setSelectionMode(2)

where

  • SelectionMode = 0 => NoSelection
  • SelectionMode = 1 => SingleSelection
  • SelectionMode = 2 => MultiSelection
  • SelectionMode = 3 => ExtendedSelection
  • SelectionMode = 4 => ContiguousSelection

Reference

In Qt Creator you find this option here: enter image description here

In addition, you can use list comprehension to get the selected items, for example

num_ITEMS=[item.text() for item in self.listWidget.selectedItems()]
Related