作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有不可编辑的 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)
最佳答案
对 @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)
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/
我是一名优秀的程序员,十分优秀!