我想将表格中的一列设置为只读!我尝试了所有可能的标志组合但都没有成功。
我还尝试了
我认为一个更好(但更复杂)的解决方案是使用
我的代码是这样的:
在主窗口中
很好的想法,尽管...
item = QtGui.QTableWidgetItem()
from operator import xor
item.setFlags(xor(item.flags(),QtCore.Qt.ItemIsEditable))
self.Table.setHorizontalHeaderItem(4, item)
我还尝试了
and not
、!=
和^
操作符,但列项仍然可编辑。
更新
我觉得我曾经误解了这个!我以为将HorizontalHeaderItem设置为不可编辑,在使用insertRow()
等操作时,这将自动使该列中的所有新项都不可编辑。
在插入新行后,我对每个新添加的项目执行了这些函数!
tableWidget.insertRow(row+1)
if tableWidget is self.myTable:
item = QtGui.QTableWidgetItem()
item.setFlags(item.flags() != QtCore.Qt.ItemIsEditable)
tableWidget.setItem(row+1, 4, item)
我认为一个更好(但更复杂)的解决方案是使用
setItemDelegateForColumn()
和QtGui.QItemDelegate()
来创建只读自定义QTableWidgetItem
,每次插入或创建新行时都会添加它。
编辑
嗯,我尝试像上面提到的那样使用setItemDelegateForColumn()
和QtGui.QItemDelegate()
,但是我得到了以下警告:
> python main.py
sys:1: RuntimeWarning: Invalid return value in function QItemDelegate.createEdit
or, expected PySide.QtGui.QWidget, got PySide.QtGui.QTableWidgetItem.
我的代码是这样的:
class QTableWidgetDisabledItem(QtGui.QItemDelegate):
"""
"""
def __init__(self, parent):
QtGui.QItemDelegate.__init__(self, parent)
def createEditor(self, parent, option, index):
item = QtGui.QTableWidgetItem()
item.setFlags(item.flags() != QtCore.Qt.ItemIsEditable)
return item
def setEditorData(self, editor, index):
editor.blockSignals(True)
editor.setData(index, editor.text())
editor.blockSignals(False)
def setModelData(self, editor, model, index):
model.setData(index, editor.text())
在主窗口中
self.Size = QTableWidgetDisabledItem(self.MyTable)
self.MyTable.setItemDelegateForColumn(4,self.Size)
很好的想法,尽管...