Search code examples
pythonpyqtpyqt4

pyqt : Display All values present in QListWidget as selected to user


I have searched a lot but I am unable to find a solution for doing this.

I have a QListWidget which will populate a list of values. I need to implement a "select all" as default behaviour in the list.

I have already used MultiSelection and that works well, but the need is to avoid clicking on each item, in case the user wants to do the update on all items listed.

Can someone help me understand how to do this?


Solution

  • From what I understand you want to implement a function that selects all items, the solution is to iterate using the setSelected() method of QListWidget as shown below:

    import sys
    from PyQt4 import QtCore, QtGui
    
    
    class ListWidget(QtGui.QListWidget):
        def __init__(self, parent=None):
            super(ListWidget, self).__init__(parent)
            self.setSelectionMode(QtGui.QListWidget.MultiSelection)
    
        @QtCore.pyqtSlot()
        def selectAll(self):
            for i in range(self.count()):
                it = self.item(i)
                if it is not None:
                    it.setSelected(True)
    
        @QtCore.pyqtSlot()
        def clearSelection(self):
            for i in range(self.count()):
                it = self.item(i)
                if it is not None:
                    it.setSelected(False)
    
    
    class Widget(QtGui.QWidget):
        def __init__(self, parent=None):
            super(Widget, self).__init__(parent)
    
            lay = QtGui.QVBoxLayout(self)
    
            button_sel = QtGui.QPushButton("Select All")
            button_unsel = QtGui.QPushButton("Clear Selection")
    
            self.list_widget = ListWidget()
    
            for letter in "ABCDEFGHIJKLMNOPQRSTUVWXYZ":
                it = QtGui.QListWidgetItem(letter)
                self.list_widget.addItem(it)
    
            button_sel.clicked.connect(self.list_widget.selectAll)
            button_unsel.clicked.connect(self.list_widget.clearSelection)
    
            lay.addWidget(button_sel)
            lay.addWidget(button_unsel)
            lay.addWidget(self.list_widget)     
    
    
    if __name__ == '__main__':
        app = QtGui.QApplication(sys.argv)
        w = Widget()
        w.show()
        sys.exit(app.exec_())