PyQT - 如何让QTreeview不可编辑但可选择?
我刚从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 代码也不难。只需要把所有的 ::
替换成 .
就可以了。