PyQt5 QTableView:如何在保持默认样式/颜色的同时禁用用户交互/选择?

Posted

技术标签:

【中文标题】PyQt5 QTableView:如何在保持默认样式/颜色的同时禁用用户交互/选择?【英文标题】:PyQt5 QTableView: how to disable user interaction/selection while keeping the default style/colors? 【发布时间】:2019-04-13 12:13:49 【问题描述】:

我需要能够以编程方式选择 TableView 的某些行,从而向用户显示选定的行。 当然,用户应该不能通过单击此处和此处来更改选定的行。

目前,我发现禁用用户交互的唯一方法是:

self.table_view.setEnabled(False)

虽然这解决了用户的选择问题,但它也改变了表格的外观,使其全部变灰:

如何恢复原始样式,使选定的行显示为蓝色?

【问题讨论】:

【参考方案1】:

打开 QDesigner 并加载您的 .ui 文件。单击您的 QTableView 并在属性编辑器(右侧面板)中向下滚动到紫色区域。在那里你会看到editTriggers,展开它。检查第一个写着NoEditTriggers 的人。

这将禁止用户编辑表格中的单元格。如果我的说明不够清楚,请告诉我,我可以提供图片。

【讨论】:

我是从头开始编写代码的,而不是使用 QDesigner 那就试试self.table.setEditTriggers(QtWidgets.QAbstractItemView.NoEditTriggers) 它没有用。也许是因为它不是关于编辑,而是选择。【参考方案2】:

如果我正确理解您的问题,您必须使用属性:

setSelectionMode()

setSelectionBehavior()

table_view.setSelectionMode(QtWidgets.QAbstractItemView.NoSelection)
table_view.setSelectionBehavior(QtWidgets.QAbstractItemView.SelectRows)

【讨论】:

以上是关于PyQt5 QTableView:如何在保持默认样式/颜色的同时禁用用户交互/选择?的主要内容,如果未能解决你的问题,请参考以下文章

如何在 QTableView 中将 QColor 作为 QBackgroundRole 返回,它在 PyQt5 中具有预设样式表?

PyQt5在QTableview中拖拽导致选中行消失

PyQt5 组件之QTableView

PyQt5 QTableView 用 Delegate 选择单元格背景

QTableView 和 QStyledItemDelegate 类的使用 (PyQt5)

带有 qTableview 的 Pandas 模型的慢 PyQt5 QAbstractTableModel