Frage

Ich habe eine regelmäßige QListWidget mit paar Signale und Slots hookedup. Alles funktioniert, wie ich erwartet. Ich kann aktualisieren, Abruf- löschen etc.

Aber die UI würde nicht eine Mehrfachauswahl unterstützen.

Wie kann ich mehrere Auswahlmöglichkeiten für QListWidget ‚enable‘? Meine begrenzte Erfahrung mit PyQt sagt mir, ich brauche eine benutzerdefinierte QListWidget zu erstellen, indem Subklassen .. aber was nun?

Google gab mir C ++ Antworten, aber ich suche Python

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

http://www.qtcentre.org/threads/11721-QListWidget- Multi-Auswahl

War es hilfreich?

Lösung

Leider kann ich nicht die Hilfe bei der Python spezifischen Syntax aber Sie keine Unterklassen erstellen müssen.

Nach dem QListWidget erstellt wird, rufen setSelectionMode() mit einem der mehreren Auswahltypen übergeben, wahrscheinlich QAbstractItemView::ExtendedSelection ist diejenige, die Sie wollen. Es gibt ein paar Variationen zu diesem Modus, dass Sie möchten, betrachten.

In Ihrem Steckplatz für das itemSelectionChanged() Signal, Anruf selectedItems() eine QList von QListWidgetItem Zeigern zu erhalten.

Andere Tipps

Für PyQT4 es ist

QListWidget.setSelectionMode(QtGui.QAbstractItemView.ExtendedSelection)

Beispiel für mehr ausgewählten Werte in listWidget mit Mehrfachauswahl zu bekommen.

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

Ausgabe: -

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top