如何在qlistwidget中打印所有选中项目的列表在python中

问题描述

如何在QlistWidget中返回或打印所有选中的项目?

我能够打印选中的项目,但是我要打印的是选中的项目

所以我想检查是否选中了该项目,如果是,系统会将选中的项目附加到列表中,最后打印此列表。

下面的代码包括GUI部分和功能

代码

    from PyQt5 import QtCore,QtGui,QtWidgets
    
    import pandas as pd
    
    from PandasModel import PandasModel
    
    import seaborn as sns
    import cufflinks as cf
    import plotly
    import plotly.offline as py
    import plotly.express as px 
    import plotly.graph_objs as go
    from plotly.offline.offline import iplot
    cf.go_offline()
    cf.set_config_file(offline=False,world_readable=True)
    
    
    class Widget(QtWidgets.QWidget):
        def __init__(self,parent=None):
            QtWidgets.QWidget.__init__(self,parent=None)
            self.gridLayout_3 = QtWidgets.qgridLayout(self)
            self.gridLayout_3.setobjectName("gridLayout_3")
           
            self.gridLayout_2 = QtWidgets.qgridLayout()
            self.gridLayout_2.setobjectName("gridLayout_2")
           
            self.gridLayout = QtWidgets.qgridLayout()
            self.gridLayout.setobjectName("gridLayout")
            
            self.pathLE = QtWidgets.QLineEdit(self)
            self.gridLayout_2.addWidget(self.pathLE,1,1)
            
    
            
            self.loadBtn = QtWidgets.QPushButton("Select File",self)
            self.loadBtn.clicked.connect(self.loadFile)
            self.gridLayout_2.addWidget(self.loadBtn,1)
            self.gridLayout_3.addLayout(self.gridLayout_2,4)
    
           
            self.displayHeader = QtWidgets.QPushButton("display header",self)
            self.displayHeader.clicked.connect(lambda: self.print_df_header(self.df))
            self.gridLayout.addWidget(self.displayHeader,2,1)
            
            self.displayDF_checked_header = QtWidgets.QPushButton("Print checked item",self)
            self.displayDF_checked_header.clicked.connect(lambda: self.setItems(self.df))
            self.gridLayout.addWidget(self.displayDF_checked_header,5,1)
       

            
            self.header_list = QtWidgets.QListWidget(self)
            self.header_list.setobjectName("listWidget")
            self.header_list.itemSelectionChanged.connect(self.selectionChanged)
            self.gridLayout_3.addWidget(self.header_list,1)
       

            self.pandasTv = QtWidgets.QTableView(self)
            self.verticalLayout.addWidget(self.pandasTv)
    
            self.pandasTv.setSortingEnabled(True)
    
    
         def loadFile(self):
            fileName,_ = QtWidgets.QFileDialog.getopenFileName(self,"Open File","","CSV Files (*.csv)");
            self.pathLE.setText(fileName)
            df = pd.read_csv(fileName)
            model = PandasModel(df)
            self.pandasTv.setModel(model)
            self.df = df
    
         def print_df_header(self,df):
            savelist = list(self.df)
            for item in savelist:
                qitem = QtWidgets.QListWidgetItem ( ) 
                qitem.setText ( item ) 
                qitem.setCheckState ( QtCore.Qt.Unchecked ) 
                self.header_list.addItem ( qitem )
            print(savelist)

         def setItems(self,item):
            self.items=[]
            if item.checkState() == QtCore.Qt.Checked:
              self.items.append(item)
              print(self.items.append(item))
        
            if item.checkState() == QtCore.Qt.Unchecked:
              self.items.remove(item)

# this function allow to print the selected items
         def selectionChanged(self):
            print("Selected items: ",self.header_list.selectedItems())
    
    if __name__ == "__main__":
        import sys
        app = QtWidgets.QApplication(sys.argv)
        w = Widget()
        w.show()
        sys.exit(app.exec_())  

解决方法

您需要循环浏览所有项目并检查其checkState()

def selectionChanged(self):
    checked = []
    for row in range(self.header_list.count()):
        item = self.header_list.item(row)
        if item.checkState():
            checked.append(item)
    print("Checked items: ",",".join(i.text() for i in checked))
        

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...