QListWidget et Sélection multiple
-
25-09-2019 - |
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
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: -