QListWidget und Mehrfachselektion
-
25-09-2019 - |
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
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: -