PyQt5的QListView多选返回值

代码如下,怎么样实现多选返回列表,显示在QLabel

图片说明

 import sys
from PyQt5.QtWidgets import QApplication,QWidget,QVBoxLayout,QListView,QAbstractItemView
from PyQt5.QtCore import QStringListModel
from PyQt5 import QtWidgets

class ListViewDemo(QWidget):
    def __init__(self,parent=None):
        super(ListViewDemo, self).__init__(parent)
        #设置初始大小与标题
        self.resize(300,270)
        self.setWindowTitle('QListView 多选问题')

        #垂直布局
        self.layout=QVBoxLayout()

        #实例化列表视图
        self.listview=QListView()

        #实例化列表模型,添加数据
        self.slm=QStringListModel()
        self.qList=['Item 1','Item 2','Item 3','Item 4','Item 5','Item 6','Item 7','Item 8','Item 9']

        #设置模型列表视图,加载数据列表
        self.slm.setStringList(self.qList)

        #设置列表视图的模型
        self.listview.setModel(self.slm)

        # 多选
        self.listview.setSelectionMode(QAbstractItemView.ExtendedSelection)
        # 不能对表格进行修改(双击重命名等)
        self.listview.setEditTriggers(QAbstractItemView.NoEditTriggers)

        self.label_dqxz = QtWidgets.QLabel()
        self.label_dqxz.setText("当前选择:-")

        #单击触发自定义的槽函数
        self.listview.clicked.connect(self.clicked)


        #设置窗口布局,加载控件
        self.layout.addWidget(self.listview)
        self.layout.addWidget(self.label_dqxz)
        self.setLayout(self.layout)

    def clicked(self,index):

        self.label_dqxz.setText('当前选择:'+self.qList[index.row()])


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

2个回答

如果答案对你有帮忙,请采纳


import sys
from PyQt5.QtWidgets import QApplication,QWidget,QVBoxLayout,QListView,QAbstractItemView
from PyQt5.QtCore import QStringListModel
from PyQt5 import QtWidgets

class ListViewDemo(QWidget):
    def __init__(self,parent=None):
        super(ListViewDemo, self).__init__(parent)
        #设置初始大小与标题
        self.resize(300,270)
        self.setWindowTitle('QListView 多选问题')

        #垂直布局
        self.layout=QVBoxLayout()

        #实例化列表视图
        self.listview=QListView()

        #实例化列表模型,添加数据
        self.slm=QStringListModel()
        self.qList=['Item 1','Item 2','Item 3','Item 4','Item 5','Item 6','Item 7','Item 8','Item 9']

        #设置模型列表视图,加载数据列表
        self.slm.setStringList(self.qList)

        #设置列表视图的模型
        self.listview.setModel(self.slm)

        # 多选
        self.listview.setSelectionMode(QAbstractItemView.ExtendedSelection)
        # 不能对表格进行修改(双击重命名等)
        self.listview.setEditTriggers(QAbstractItemView.NoEditTriggers)

        self.label_dqxz = QtWidgets.QLabel()
        self.label_dqxz.setText("当前选择:-")

        #单击触发自定义的槽函数
        self.listview.clicked.connect(self.clicked)



        #设置窗口布局,加载控件
        self.layout.addWidget(self.listview)
        self.layout.addWidget(self.label_dqxz)
        self.setLayout(self.layout)

    def clicked(self):
        textlist=''
        for i in self.listview.selectedIndexes():
            text=i.data()
            textlist=textlist+' '+text
        self.label_dqxz.setText('当前选择:'+textlist)


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

l565125579
l565125579 谢谢大佬,受教了,果然CSDN都是大神
一年多之前 回复

我找到了另外一个实现方法,但是还是楼上大佬的更给力,只加了4行代码,佩服
还是把我的代码贴上来,给大家参考

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

class ListViewDemo(QWidget):
    def __init__(self,parent=None):
        super(ListViewDemo, self).__init__(parent)
        #设置初始大小与标题
        self.resize(300,270)
        self.setWindowTitle('QListView 多选问题')

        #垂直布局
        self.layout=QVBoxLayout()

        self.qList=['Item 1','Item 2','Item 3','Item 4','Item 5','Item 6','Item 7','Item 8','Item 9','Item 6','Item 7','Item 8','Item 9','Item 6','Item 7','Item 8','Item 9']

        self.listWidget = QListWidget(self)
        self.listWidget.addItems(self.qList) #批量加

        self.listWidget.setSelectionMode(QAbstractItemView.ExtendedSelection)  # 按住CTRL可多选
        #self.listWidget.setSelectionMode(QAbstractItemView.SingleSelection)  #单选

        text_list = self.listWidget.selectedItems()
        text = [i.text() for i in list(text_list)]
        print(text)

        self.label_dqxz = QtWidgets.QLabel()
        self.label_dqxz.setText("当前选择:-")

        #单击触发自定义的槽函数
        self.listWidget.itemClicked.connect(self.clicked)

        #设置窗口布局,加载控件
        self.layout.addWidget(self.listWidget)
        self.layout.addWidget(self.label_dqxz)
        self.setLayout(self.layout)

    def clicked(self):
        text_list = self.listWidget.selectedItems()
        text = [i.text() for i in list(text_list)]
        text = '、'.join(text)  # text即多选项并以、隔开
        self.label_dqxz.setText('当前选择:' + text)

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

Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
立即提问