Qlistwidget и множественный выбор
-
25-09-2019 - |
Вопрос
У меня регулярно QListWidget
С парой сигналов и слотов подключен. Все работает, как я ожидаю. Я могу обновить, извлекать, ясно и т. Д.
Но UI не поддержит несколько выборов.
Как я могу «включить» несколько выборов для QListWidget
? Мой ограниченный опыт с pyqt говорит мне, что мне нужно создать пользовательский QListWidget
Подклассы .. Но что дальше?
Google дал мне ответы C ++, но ищу Python
http://www.qtforum.org/article/26320/qlistwidget-multiple-selection.html.
http://www.qtcentre.org/threads/11721-qlistwidget-multdselection.
Решение
К сожалению, я не могу помочь с синтаксисом Python Special Syntax, но вам не нужно создавать какие-либо подклассы.
После вашего QListWidget
Создан, звонок setSelectionMode()
С одним из множественных типов выбора прошла, возможно, QAbstractItemView::ExtendedSelection
тот, который вы хотите. Есть несколько вариаций в этом режиме, на который вы можете посмотреть.
В вашем слоте для itemSelectionChanged()
сигнал, вызов selectedItems()
чтобы получить QList
из QListWidgetItem
Указатели.
Другие советы
Для PYQT4 это
QListWidget.setSelectionMode(QtGui.QAbstractItemView.ExtendedSelection)
Пример получения нескольких выбранных значений в 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_()
выход :-