python - 如何在 QTableWidget 中使特定单元格可编辑并保留其余单元格不可编辑?

标签 python pyqt pyqt5 qtableview qtablewidget

我有不可编辑的 QTableWidget。(我在创建 Ui 文件时设置了 noEditTriggers)。我想让每行的特定单元格都可编辑。我怎样才能完成这个任务?

我在 SO 和其他平台上研究了几个答案,但没有得到任何对我有用的东西。

目前我正在使用这段代码。它没有给出错误,但我仍然无法编辑该单元格值。

self.item = QTableWidgetItem('Hi')
flags = self.item.flags()
flags ^= QtCore.Qt.ItemIsEditable
self.item.setFlags(flags)
self.table.setItem(row, column, self.item)

编辑::

Snippet to get the table view

最佳答案

@musicamante 使用相同的基础答案是创建一个仅返回特定列中的一个编辑器的委托(delegate),优点是不需要对 QTableWidget 进行子类化,并且逻辑可以在其他类型的 View 中使用:

class Delegate(QtWidgets.QStyledItemDelegate):
    def createEditor(self, parent, option, index):
        if index.column() == 2:
            return super(Delegate, self).createEditor(parent, option, index)
delegate = Delegate(self.table)
self.table.setItemDelegate(delegate)

更新:

如果您希望带有 NN 的单元格可编辑,那么您必须在满足该条件时返回编辑器:index.data() == "NN"

import random
import sys

from PyQt5 import QtWidgets


class Delegate(QtWidgets.QStyledItemDelegate):
    def createEditor(self, parent, option, index):
        if index.data() == "NN":
            return super(Delegate, self).createEditor(parent, option, index)


if __name__ == "__main__":
    app = QtWidgets.QApplication(sys.argv)

    texts = ["Hello", "Stack", "Overflow", "NN"]

    table = QtWidgets.QTableWidget(10, 5)
    delegate = Delegate(table)
    table.setItemDelegate(delegate)

    for i in range(table.rowCount()):
        for j in range(table.columnCount()):
            text = random.choice(texts)
            it = QtWidgets.QTableWidgetItem(text)
            table.setItem(i, j, it)

    table.resize(640, 480)
    table.show()
    sys.exit(app.exec_())

关于python - 如何在 QTableWidget 中使特定单元格可编辑并保留其余单元格不可编辑?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60357193/

相关文章:

python - 使用装饰器补丁在 Python 中模拟类

postgresql - PyQt,如何检查数字数组是否具有特定长度

python - QGraphicsItem 移动后没有留在原处

python - 从打开的文件中获取文件名,而不是文件路径

python - 如何使用 QWebEngine 在同一窗口中打开任何链接(_blank)

python - 我正在尝试调试给定的 python 代码,但它给出了给定的错误

python - Django : How to query users based on latest post

python - spark 数据帧是分布式的吗?

python - 在不生成新窗口的情况下在 Qt 中嵌入 PyQtGraph

python - PyQt5 QML TreeView 示例