QListWidget e Selezione multipla
-
25-09-2019 - |
Domanda
Ho un QListWidget
regolare con paio di segnali e slot hookedup. Tutto funziona come mi aspetto. Posso aggiornare, recuperare, cancellare ecc.
Ma l'interfaccia utente wont supporta selezioni multiple.
Come faccio a 'Abilita' diverse selezioni per QListWidget
? La mia esperienza limitata con PyQt mi dice che ho bisogno di creare un QListWidget
personalizzato sottoclasse .. ma poi?
Google mi ha dato risposte C ++, ma sto cercando Python
http://www.qtforum.org/article/26320/ qlistwidget-multiple-selection.html
http://www.qtcentre.org/threads/11721-QListWidget- multi-selezione
Soluzione
Purtroppo non posso fare con la sintassi specifica di Python, ma non è necessario creare eventuali sottoclassi.
Dopo aver creato il vostro QListWidget
, chiamata setSelectionMode()
con uno dei più tipi di selezione passati in, probabilmente QAbstractItemView::ExtendedSelection
è quello che si desidera. Ci sono alcune variazioni su questa modalità che si potrebbe voler guardare.
In slot per il segnale itemSelectionChanged()
, chiamata selectedItems()
per ottenere un QList
di puntatori QListWidgetItem
.
Altri suggerimenti
Per PyQt4 è
QListWidget.setSelectionMode(QtGui.QAbstractItemView.ExtendedSelection)
Esempio di ottenere molteplici selezionato i valori in listWidget con selezione multipla.
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_()
uscita: -