Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/339.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python PyQt5动态删除QListWidgets和QPushButton并与listItems交互_Python_Pyqt5_Qpushbutton_Qlistwidget_Qgridlayout - Fatal编程技术网

Python PyQt5动态删除QListWidgets和QPushButton并与listItems交互

Python PyQt5动态删除QListWidgets和QPushButton并与listItems交互,python,pyqt5,qpushbutton,qlistwidget,qgridlayout,Python,Pyqt5,Qpushbutton,Qlistwidget,Qgridlayout,在我的QApplication中,我希望动态创建QListWidgets,并对listitems执行一些操作。 我想创建一个收藏夹选项卡。唯一认为工作是自我的人 有4个按钮 self.buttonOK按钮必须使用列表项 self.buttonRemoveFav必须使用4个QPushButtons删除整个QListWidget self.buttonDel必须清除整个列表 import sys, time, names from PyQt5 import QtCore from PyQt5.QtC

在我的QApplication中,我希望动态创建QListWidgets,并对listitems执行一些操作。 我想创建一个收藏夹选项卡。唯一认为工作是自我的人

有4个按钮

  • self.buttonOK按钮必须使用列表项
  • self.buttonRemoveFav必须使用4个QPushButtons删除整个QListWidget
  • self.buttonDel必须清除整个列表
    import sys, time, names
    from PyQt5 import QtCore
    from PyQt5.QtCore import QAbstractTableModel, Qt
    from PyQt5.QtWidgets import *
    from functools import partial
    import names
    
    colPos = 0
    
    class MainWindow(QMainWindow):
        def __init__(self):
            QMainWindow.__init__(self)
    
            self.resize(800, 600)        
    
            self.tabs = QTabWidget()
            self.tabs.layout = QGridLayout() 
            self.tabs.setLayout(self.tabs.layout)
    
            self.grid = QGridLayout()
            self.grid.addWidget(self.tabs)
            self.setLayout(self.grid)
            self.setCentralWidget(self.tabs)  
    
            self.result = QTabWidget()
            self.result.layout = QGridLayout() 
            self.result.setLayout(self.result.layout)
    
            self.fav = QTabWidget()
            self.fav.layout = QGridLayout()
            self.fav.setLayout(self.fav.layout)
    
            self.tabs.addTab(self.result, 'Tab 1')      
            self.tabs.addTab(self.fav, 'Fav')
    
            #create space to put the export button in the bottom of the TableView
            positions = [(i,j) for i in range(20) for j in range(10)]
            lst = []
            for i in range(30):
                lst.append(names.get_full_name())
    
            print(lst)
            self.checkBoxes = [] 
    
            for position, no in zip(positions, lst): 
                self.checkB = QCheckBox(str(no), self)
                self.result.layout.addWidget(self.checkB, *position)
                self.checkBoxes.append(self.checkB)
    
            #select All     
            self.buttonSelAll = QPushButton("Select All", self)
            self.buttonSelAll.clicked.connect(partial(self.selectBoxes, True))
            self.result.layout.addWidget(self.buttonSelAll, 21, 0)
    
            #select All     
            self.buttonNone = QPushButton("Select None", self)
            self.buttonNone.clicked.connect(partial(self.selectBoxes, False))
            self.result.layout.addWidget(self.buttonNone, 21, 1)
    
            #select All     
            self.buttonFav = QPushButton("Fav", self)
            self.buttonFav.clicked.connect(self.toFav)
            self.result.layout.addWidget(self.buttonFav, 21, 3)
    
            self.checkBtext = [] # var for text of checkboxes.
            for i in range(len(self.checkBoxes)):
                self.checkBtext.append(self.checkBoxes[i].text())
    
            self.res = {}     
    
        def resetColPos(self):
            global colPos
            colPos = colPos - 2
            self.listWidget_fav.hide()
            self.buttonOK.hide()
            self.buttonDel.hide() 
            self.buttonDelSel.hide() 
            self.buttonRemoveFav.hide()
    
        def removeSelfromFav(self):
            listItems = self.listWidget_fav.selectedItems()
            if not listItems: return        
            for item in listItems:
                self.listWidget_fav.takeItem(self.listWidget_fav.row(item)) 
    
        def toFav(self):
            global colPos
            states = [c.isChecked() for c in self.checkBoxes]
            self.selectedChecktext = [] #Text of selected checkbox
            for key in self.checkBtext: 
                for value in states: 
                    self.res[key] = value 
                    states.remove(value)
                    break
    
            print("self.res.items(): ", self.res.items())
            print(len(self.res))  
            for k, v in self.res.items():
                if v == True and not k in self.selectedChecktext:
                    self.selectedChecktext.append(k)
                elif v == False and k in self.selectedChecktext:
                    self.selectedChecktext.remove(k)
            print("self.selectedChecktext: ", self.selectedChecktext)
    
            self.listWidget_fav = QListWidget()     
            self.listWidget_fav.addItems(self.selectedChecktext)
            self.fav.layout.addWidget(self.listWidget_fav, 0, colPos, 5, 2)
            self.fav.setLayout(self.fav.layout)
    
            self.buttonOK = QPushButton("ok", self)
            self.fav.layout.addWidget(self.buttonOK, 6, colPos)
            self.fav.setLayout(self.fav.layout) 
    
            self.buttonRemoveFav = QPushButton("Remove Fav", self)
            self.buttonRemoveFav.clicked.connect(self.resetColPos)
            self.fav.layout.addWidget(self.buttonRemoveFav, 6, colPos+1)
            self.fav.setLayout(self.fav.layout) 
    
            self.buttonDel = QPushButton("Clear List", self)
            self.buttonDel.clicked.connect(self.listWidget_fav.clear)
            self.fav.layout.addWidget(self.buttonDel, 7, colPos)
            self.fav.setLayout(self.fav.layout)   
    
            self.buttonDelSel = QPushButton("Delete selected", self)
            self.fav.layout.addWidget(self.buttonDelSel, 7, colPos+1)
            self.fav.setLayout(self.fav.layout)
    
            colPos = colPos + 2
    
        def checkStates(self):
            states = [c.isChecked() for c in self.checkBoxes]
            print ("states: ", states)
    
        def selectBoxes(self, state):
            for check in self.checkBoxes:
                check.blockSignals(True)
                check.setChecked(state)
                check.blockSignals(False)
            self.checkStates()
    
    if __name__ == '__main__':
        app = QApplication(sys.argv)
        app.setStyle('Fusion')
        mw = MainWindow()
        mw.show()
        sys.exit(app.exec_())