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

Foi útil?

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

enter image description here

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top