不可编辑的QListView

发布于 2024-11-11 14:20:20 字数 331 浏览 7 评论 0原文

我有一个显示项目列表的 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)

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)

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(5

一绘本一梦想 2024-11-18 14:20:20

添加行:

self.listView.setEditTriggers(QAbstractItemView.NoEditTriggers)

应该可以为您解决问题。

QListView 继承 QAbstractItemView ,它具有方法 setEditTriggers()setEditTriggers可能的值 > 可在文档中找到。

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.

失去的东西太少 2024-11-18 14:20:20

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

虽然我还发现如果您为 QListView 提供鼠标双击事件并将其设置为执行除编辑 QListView 之外的其他操作,它会覆盖编辑功能,因此也可以工作。

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.

柠北森屋 2024-11-18 14:20:20

如果 model 将附加到多个视图,并且您不希望其中任何一个视图都可以对其进行编辑,则可以子类化 QStringListModel 并重写 flags()< /code>:

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)

现在用户将无法从任何视图编辑模型

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.

巷雨优美回忆 2024-11-18 14:20:20

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

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

橘寄 2024-11-18 14:20:20

在 PySide6 中,

from PySide6.QtWidgets import QListView, QAbstractItemView
...

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

In PySide6,

from PySide6.QtWidgets import QListView, QAbstractItemView
...

self.listview = QListView()
self.listview.setEditTriggers(QAbstractItemView.EditTrigger.NoEditTriggers)
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文