2017-01-20 36 views
1

Как я могу получить все выбранные элементы для QListWidget внутри обработчика событий («слот»), который активируется, когда пользователь взаимодействует со списком? Другими словами, мне нужно иметь полный список выбранных элементов, доступных пользователю, когда пользователь преформирует действие (например, выбор нового выбора в списке)Как я могу получить все выбранные элементы для QListWidget, когда пользователь взаимодействует со списком?

Что я до сих пор пытался использовать QListWidget.currentItemChanged, а затем пытаюсь получить все выбранные элементы списка с QListWidget.selectedItems() проблемой я имею с этим подходом является то, что список возвращается из функции selectedItems() не обновляется до тех пор, после выхода из обработчика событий, который я подключен к currentItemChanged

решения, которое я ищу for должен работать с «MultiSelection» (одновременно можно выбирать несколько элементов списка)

Спасибо за помощь и с наилучшими пожеланиями, Tord

ответ

1

Вы должны использовать сигнал itemSelectionChanged, это активируется, когда выбран какой-либо элемент.

import sys 

from PyQt5.QtWidgets import QAbstractItemView, QApplication, QListWidget, QListWidgetItem, QVBoxLayout, QWidget 


class Widget(QWidget): 
    def __init__(self, parent=None): 
     super(Widget, self).__init__(parent=parent) 
     self.layout = QVBoxLayout(self) 
     self.listWidget = QListWidget(self) 
     self.layout.addWidget(self.listWidget) 
     self.listWidget.setSelectionMode(QAbstractItemView.MultiSelection) 
     self.listWidget.itemSelectionChanged.connect(self.on_change) 

     for i in range(10): 
      item = QListWidgetItem() 
      item.setText(str(i)) 
      self.listWidget.addItem(item) 

    def on_change(self): 
     print("start") 
     print([item.text() for item in self.listWidget.selectedItems()]) 


if __name__ == '__main__': 
    app = QApplication(sys.argv) 
    w = Widget() 
    w.show() 
    sys.exit(app.exec_()) 

enter image description here

Выход:

start 
['2'] 
start 
['2', '3'] 
start 
['2', '3', '4'] 
start 
['2', '3', '4', '6'] 
+0

Спасибо так много! (Я думал, что я пытался «itemSelectionChanged» при экспериментировании с разными сигналами, но я, должно быть, пропустил его) – sunyata