QlistWidget e seleção múltipla
-
25-09-2019 - |
Pergunta
Eu tenho um regular QListWidget
com alguns sinais e slots ligados. Tudo funciona como eu espero. Eu posso atualizar, recuperar, limpar etc.
Mas a interface do usuário não suporta várias seleções.
Como eu 'habilite' múltiplas seleções para QListWidget
? Minha experiência limitada com o PYQT me diz que preciso criar um costume QListWidget
por subclassificar .. mas o que vem depois?
O Google me deu respostas C ++, mas estou procurando por Python
http://www.qtforum.org/article/26320/qlistwidget-multiple-selection.html
http://www.qtcentre.org/threads/11721-qlistwidget-multi-selection
Solução
Infelizmente, não posso evitar a sintaxe específica do Python, mas você não precisa criar subclasses.
Depois do seu QListWidget
é criado, ligue setSelectionMode()
com um dos vários tipos de seleção passados, provavelmente QAbstractItemView::ExtendedSelection
é o que você deseja. Existem algumas variações nesse modo que você pode querer olhar.
No seu slot para o itemSelectionChanged()
sinal, ligue selectedItems()
para obter um QList
do QListWidgetItem
Ponteiros.
Outras dicas
Para pyqt4 é
QListWidget.setSelectionMode(QtGui.QAbstractItemView.ExtendedSelection)
Exemplo de obter vários valores selecionados no ListWidget com seleção múltipla.
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_()
resultado :-