Pregunta

Tengo un QListWidget regular con par de señales y slots hookedup. Todo funciona como espero. Puedo actualizar, recuperar, borrar, etc.

Sin embargo, la interfaz de usuario planteo admite varias selecciones.

¿Cómo 'habilitar' múltiples selecciones para QListWidget? Mi experiencia limitada con PyQt me dice que necesito para crear un QListWidget encargo subclasificando .. pero ¿qué sigue?

Google me dio respuestas C ++ pero estoy buscando para Python

http://www.qtforum.org/article/26320/ qlistwidget-múltiple-selection.html

http://www.qtcentre.org/threads/11721-QListWidget- selección múltiple

¿Fue útil?

Solución

Por desgracia no puedo ayudar con la sintaxis específica de Python, pero no es necesario para crear cualquier subclase.

Una vez creado el QListWidget, setSelectionMode() llamada con uno de los múltiples tipos de selección aprobadas en, probablemente QAbstractItemView::ExtendedSelection es el que usted desea. Hay algunas variaciones de este modo que es posible que desee ver.

En su ranura para la señal itemSelectionChanged(), selectedItems() llamada para obtener un QList de punteros QListWidgetItem.

Otros consejos

Para PyQt4 es

QListWidget.setSelectionMode(QtGui.QAbstractItemView.ExtendedSelection)

Ejemplo de conseguir múltiples seleccionados valores en listWidget con selección múltiple.

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

salida: -

introducir descripción de la imagen aquí

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top