gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-04 10:32:28 37 4
gpt4 key购买 nike

我有不可编辑的 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/

37 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com