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

How can I get all selected items for a QListWidget when the user interacts with the list?

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

到目前为止我尝试的是使用 QListWidget.currentItemChanged 然后尝试使用 QListWidget.selectedItems() 获取所有选定的列表项 我使用这种方法时遇到的问题是从selectedItems() 函数直到退出我已连接到 currentItemChanged

的事件处理程序后才会更新

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

感谢您的帮助和亲切的问候, 托德

您必须使用 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_())

输出:

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

这在您定义 QMainWindow

的 class 内部
class YourClass(QMainWindow):

    def __init__(self):
       super(YourClass,self).__init__()
       uic.loadUi("Your_Qt_document_name.ui", self)

       #Binding the QListWidget created in the Qt Designer
       self.Your_QListWidget_Name.clicked.connect(self.getListItem)

    #on cLick item method
    def getListItem(self):
       #prints the selected item
       print(self.Your_QListWidget_Name.currentItem().text())