l565125579
l565125579
采纳率100%
2018-12-03 10:53

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条回答

  • weixin_39416561 lyhsdy 3年前

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

    
    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 3年前

    我找到了另外一个实现方法,但是还是楼上大佬的更给力,只加了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_())
    
    
    点赞 评论 复制链接分享

相关推荐