简体   繁体   English

如何打印 qlistwidget 中所有选中项目的列表。 在蟒蛇

[英]how to print a list of all the checked items in qlistwidget. in python

How to return or print all the checked items in a QlistWidget?如何返回或打印 QlistWidget 中所有选中的项目?

I am able to print the selected items but what i want is to print the checked items我能够打印选定的项目,但我想要的是打印选中的项目

So i want to check if the item is checked if yes the system append the checked item to the list and at the end it prints this list.所以我想检查是否检查了该项目,如果是,系统将检查的项目附加到列表中,并在最后打印此列表。

The code below includes the GUI part and the functions:下面的代码包括 GUI 部分和功能:

  • load file加载文件
  • display header显示标题
  • display checked items显示选中的项目

code:代码:

    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, 0, 1, 1, 1)
            
    
            
            self.loadBtn = QtWidgets.QPushButton("Select File", self)
            self.loadBtn.clicked.connect(self.loadFile)
            self.gridLayout_2.addWidget(self.loadBtn, 0, 0, 1, 1)
            self.gridLayout_3.addLayout(self.gridLayout_2, 0, 0, 1, 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, 0, 1, 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, 0, 1, 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, 2, 1, 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_())  

You need to cycle through all items and check for their checkState() :您需要遍历所有项目并检查它们的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))
        

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM