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

2024-04-19 15:29:06 发布

您现在位置:Python中文网/ 问答频道 /正文

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

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

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

感谢您的帮助和亲切的问候, 扭转


Tags: 方法函数用户处理程序列表选项事件解决方案
1条回答
网友
1楼 · 发布于 2024-04-19 15:29:06

您必须使用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']

相关问题 更多 >