【发布时间】:2014-06-03 20:59:43
【问题描述】:
我想将表中的一列设置为只读!我尝试了所有可能的标志组合但没有成功
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() 创建一个只读的 costum 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)
这是个好主意...
【问题讨论】:
-
您是否尝试从列的所有项目中删除
Qt.ItemIsEnabled标志? -
@vahancho 你的意思是循环?
-
是的,例如在循环中。