【问题标题】:PyQT -- How can you make a QTreeview uneditable but also selectable?PyQT——如何使 QTreeview 不可编辑但也可选择?
【发布时间】:2014-06-11 21:19:00
【问题描述】:

我刚从 wxPython 切换到 PyQT,但在使用 QTreeview 时遇到了一些问题。我有一个 QTreeview,它将显示分类为可扩展部分的数据,但此 TreeView 中的数据不应该是可编辑的,但我需要能够让用户选择数据(双击将执行另一种方法)。我不确定如何使它只读但也可选择。我使用 QStandardItemModel 和 QStandardItem 来保存数据。

任何帮助将不胜感激。

【问题讨论】:

    标签: python pyqt qtreeview qstandarditemmodel qstandarditem


    【解决方案1】:

    您可以在创建 QSandardItem 时将单个项目设置为不可编辑

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

    您可以通过调用禁用整个树视图的编辑

    my_treeview.setEditTriggers(QAbstractItemView.NoEditTriggers)
    

    默认情况下,树视图应该允许您选择项目,但如果您想更改默认行为,您需要查看树视图的 setSelectionMode() 和 setSelectionBehavior() 方法(它们适用于 QAbstractItemView QTreeView 继承自)。这些方法的 c++ 文档可以在 here 找到,我通常在 PyQt 文档上使用它,因为它通常更完整,并且翻译成 Python 代码并不难。只需将:: 的所有实例替换为.)

    【讨论】:

    • 感谢您的快速回复!这就像我需要的那样工作。我还发现您可以执行类似“item.setFlags(QtCore.Qt.ItemIsEnabled | QtCore.Qt.ItemIsSelectable)”的操作,它会给您相同的行为。但是一次禁用整个树视图的编辑会更好。
    • 没问题!我很确定 item.setEditable() 在低级别包装 item.setFlags(),但不会覆盖与编辑无关的现有标志集。
    猜你喜欢
    • 1970-01-01
    • 2011-11-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-04-02
    • 2023-03-05
    • 2010-12-12
    相关资源
    最近更新 更多