QListWidget и множественный выбор - PullRequest
14 голосов
/ 24 октября 2010

У меня обычный QListWidget с парой сигналов и подключенными слотами.Все работает как я ожидаю.Я могу обновлять, извлекать, очищать и т. Д.

Но пользовательский интерфейс не поддерживает множественный выбор.

Как «включить» множественный выбор для QListWidget?Мой ограниченный опыт работы с PyQt говорит мне, что мне нужно создать пользовательский QListWidget путем создания подклассов ... но что дальше?

Google дал мне ответы C ++, но я ищу Python

http://www.qtforum.org/article/26320/qlistwidget-multiple-selection.html

http://www.qtcentre.org/threads/11721-QListWidget-multi-selection

Ответы [ 3 ]

18 голосов
/ 03 июня 2014

Для PyQT4 это

QListWidget.setSelectionMode(QtGui.QAbstractItemView.ExtendedSelection)
18 голосов
/ 24 октября 2010

К сожалению, я не могу помочь с конкретным синтаксисом Python, но вам не нужно создавать никаких подклассов.

После того, как ваш QListWidget создан, вызовите setSelectionMode() с одним из нескольких переданных типов выбора, вероятно, вам нужен QAbstractItemView::ExtendedSelection.В этом режиме вы можете посмотреть несколько вариантов.

В вашем слоте для сигнала itemSelectionChanged() позвоните selectedItems(), чтобы получить QList из QListWidgetItem указателей.

2 голосов
/ 29 августа 2018

Пример получения нескольких выбранных значений в listWidget с множественным выбором.

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

вывод: -

enter image description here

...