Jay
Jay

Reputation: 3479

Uneditable QListView

I have a QListView displaying a list of items but I don't want the items to be edited (Currently a double click on the item allows you to edit them).

This is my Code:

self.listView = QListView()
self.model = QStringListModel([ "item1" , "item2" , "item3" ])
self.listView.setModel( self.model )

self.layout = QGridLayout()  
self.layout.addWidget(self.listView, 0 , 0 )
self.setLayout(self.layout)

Upvotes: 23

Views: 15784

Answers (5)

Oh Jongjin
Oh Jongjin

Reputation: 13

In PySide6,

from PySide6.QtWidgets import QListView, QAbstractItemView
...

self.listview = QListView()
self.listview.setEditTriggers(QAbstractItemView.EditTrigger.NoEditTriggers)

Upvotes: 0

gwohpq9
gwohpq9

Reputation: 2203

QStringListModel is by definition editable. You should subclass and provide the appropriate flags

Upvotes: 0

Gary Hughes
Gary Hughes

Reputation: 4510

Adding the line:

self.listView.setEditTriggers(QAbstractItemView.NoEditTriggers)

should fix things for you.

QListView inherits QAbstractItemView which has the method setEditTriggers(). Other possible values for setEditTriggers are available in the docs.

Upvotes: 49

Jay
Jay

Reputation: 3479

Thanks for the responses. I ended up going with a QListWidget instead as it is not editable by default.

Though I also found if you give the QListView a mouse Double clicked event and set it to do something other than edit the QListView, it overrides the edit function so that works too.

Upvotes: 2

jpyams
jpyams

Reputation: 4364

If model will be attached to multiple views and you don't want it to be editable by any of them, you can subclass QStringListModel and override flags():

from PyQt5.QtCore import Qt

class UneditableStringListModel(QStringListModel):

    def flags(self, index):
        return Qt.ItemIsSelectable & Qt.ItemIsEnabled


listView = QListView()
model = UneditableStringListModel([ "item1" , "item2" , "item3" ])
listView.setModel(model)

Now the user will not be able to edit model from any view.

Upvotes: 0

Related Questions