Question

J'ai un QListWidget régulier avec deux signaux et slots hookedup. Tout fonctionne comme je l'attends. Je peux mettre à jour, récupérer, etc clair.

Mais l'interface utilisateur supporte l'habitude des sélections multiples.

Comment puis-je activer 'les sélections multiples pour QListWidget? Mon expérience limitée avec PyQt me dit que je dois créer un QListWidget personnalisé .. mais par le sous-classement après?

Google m'a donné C ++ réponses mais je suis à la recherche Python

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

http://www.qtcentre.org/threads/11721-QListWidget- multi-sélection

Était-ce utile?

La solution

Malheureusement, je ne peux pas aider à la syntaxe spécifique Python, mais vous n'êtes pas obligé de créer des sous-classes.

Après votre QListWidget est créé, appelez setSelectionMode() avec l'un des multiples types de sélection transmis, probablement QAbstractItemView::ExtendedSelection est celui que vous voulez. Il y a quelques variations sur ce mode que vous pouvez regarder.

Dans votre emplacement pour le signal itemSelectionChanged(), appelez selectedItems() pour obtenir un QList des pointeurs QListWidgetItem.

Autres conseils

Pour pyqt4 il est

QListWidget.setSelectionMode(QtGui.QAbstractItemView.ExtendedSelection)

Exemple d'obtenir plusieurs valeurs sélectionnées dans listWidget avec sélection multiple.

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

Sortie: -

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top