PyQT - 如何让QTreeview不可编辑但可选择?

11 投票
1 回答
8896 浏览
提问于 2025-04-18 04:18

我刚从wxPython转到PyQT,现在在使用QTreeview的时候遇到了一些问题。我有一个QTreeview,它会显示分类的数据,这些分类是可以展开的。但是,这个TreeView里的数据不应该被编辑,不过我需要用户能够选择这些数据(双击会执行另一个方法)。我不太确定怎么才能让它既是只读的,又能被选择。我正在使用QStandardItemModel和QStandardItem来存放这些数据。

任何帮助都非常感谢。

1 个回答

20

你可以在创建 QStandardItem 时,设置某些项目为不可编辑,方法如下:

item = QStandardItem('my_item_text')
item.setEditable(False)

如果你想让整个树形视图都不能编辑,可以调用:

my_treeview.setEditTriggers(QAbstractItemView.NoEditTriggers)

默认情况下,树形视图是允许你选择项目的,但如果你想改变这个默认行为,可以看看树形视图的 setSelectionMode()setSelectionBehavior() 方法(其实它们是 QAbstractItemView 的方法,而 QTreeView 是从它继承来的)。关于这些方法的 C++ 文档可以在 这里 找到。一般来说,我更喜欢这个文档,因为它通常更完整,而且翻译成 Python 代码也不难。只需要把所有的 :: 替换成 . 就可以了。

撰写回答