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

时间:2017-01-20 20:45:38

标签: python pyqt pyqt5 qlistwidget

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

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

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

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

2 个答案:

答案 0 :(得分:4)

您必须使用GameObject信号,当选择任何项目时会激活此信号。

itemSelectionChanged

enter image description here

输出:

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_())

答案 1 :(得分:0)

这进入定义QMainWindow的类中

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())