不可编辑的QListView

时间:2011-06-03 10:55:57

标签: static locking pyqt edit qlistview

我有一个显示项目列表的QListView,但我不希望编辑这些项目(目前双击该项目可以编辑它们。)

这是我的代码:

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)

4 个答案:

答案 0 :(得分:31)

添加行:

self.listView.setEditTriggers(QAbstractItemView.NoEditTriggers)

应该为你解决问题。

QListView继承了QAbstractItemView,它具有方法setEditTriggers()。文档中提供了setEditTriggers的其他possible values

答案 1 :(得分:0)

感谢您的回复。我最后选择了QListWidget,因为默认情况下它不可编辑。

虽然我也发现如果你给QListView鼠标双击事件并将其设置为执行除编辑QListView以外的其他操作,它会覆盖编辑功能以便也能正常工作。

答案 2 :(得分:0)

如果model将附加到多个视图,并且您不希望它们可被任何视图编辑,则可以将QStringListModel子类化并覆盖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)

现在,用户将无法从任何视图编辑model

答案 3 :(得分:-1)

根据定义,QStringListModel是可编辑的。您应该子类并提供适当的flags