Search code examples
pythonpyqtpyqt5qlistviewqstandarditemmodel

Set selection of item in QStandarItemModel with Qlistview


I have a Qlistview with some items. I want to set selection at first item at startup of window. selectionModel().selectedRows() returns the selectet item. But QAbstractItemModel().setCurrentIndex(0) does't select the item. How could that be done like setSelection(INDEX).

self.listView = QtWidgets.QListView()
self.entry = QtGui.QStandardItemModel()
self.listView.setModel(self.entry) 
----------
self.listView.setEditTriggers(QtWidgets.QAbstractItemView.NoEditTriggers)
self.listView.setSelectionMode(QtWidgets.QAbstractItemView.SingleSelection)
self.listView.setSelectionBehavior(QtWidgets.QAbstractItemView.SelectRows)
----------
self.listView.QAbstractItemModel().setCurrentIndex(0)     #<------ Not really working
selection = self.listView.selectionModel().selectedRows()
print(selection)

Solution

  • If you want to select an item then you must use the select() method of selectionModel():

    from PyQt5 import QtCore, QtGui, QtWidgets
    
    
    class MainWindow(QtWidgets.QMainWindow):
        def __init__(self, parent=None):
            super(MainWindow, self).__init__(parent)
    
            self.listView = QtWidgets.QListView(
                editTriggers=QtWidgets.QAbstractItemView.NoEditTriggers,
                selectionMode=QtWidgets.QAbstractItemView.SingleSelection,
                selectionBehavior=QtWidgets.QAbstractItemView.SelectRows,
            )
            self.entry = QtGui.QStandardItemModel()
            self.listView.setModel(self.entry)
    
            for letter in list("abcdefghijklmnopqrstuvwxyz"):
                it = QtGui.QStandardItem(letter)
                self.entry.appendRow(it)
    
            ix = self.entry.index(0, 0)
            sm = self.listView.selectionModel()
            sm.select(ix, QtCore.QItemSelectionModel.Select)
    
            self.setCentralWidget(self.listView)
    
    
    if __name__ == "__main__":
        import sys
    
        app = QtWidgets.QApplication(sys.argv)
        w = MainWindow()
        w.show()
        sys.exit(app.exec_())