当用户与列表交互时,如何获取QListWidget的所有选定项?

sun*_*ata 4 python pyqt qlistwidget pyqt5

我如何获取事件处理程序(“插槽”)中QListWidget的所有选定项,该事件处理程序在用户与列表进行交互时被激活?换句话说,当用户执行某项操作时(例如在列表中选择一个新的选择),我需要有可用选择项的完整列表。

到目前为止,我尝试使用的是什么QListWidget.currentItemChanged,然后尝试使用来获取所有选定的列表项QListWidget.selectedItems()。这种方法的问题在于,从selectedItems()函数返回的列表直到退出我已连接的事件处理程序后才更新至currentItemChanged

我正在寻找的解决方案必须与“ MultiSelection”一起使用(可以同时选择多个列表项)

感谢帮助和友善的问候,托德

eyl*_*esc 5

您必须使用该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_())
Run Code Online (Sandbox Code Playgroud)

在此处输入图片说明

输出:

start
['2']
start
['2', '3']
start
['2', '3', '4']
start
['2', '3', '4', '6']
Run Code Online (Sandbox Code Playgroud)