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

È stato utile?

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: -

entrare descrizione dell'immagine qui

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top