QListWidget y Selección Múltiple
-
25-09-2019 - |
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
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: -