我想在表中设置一列为只读!我试过各种可能的组合旗子,但都没有成功
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()
创建一个只读的costumQTableWidgetItem
,每次插入或创建新行时都会添加这个costum
我试着使用上面提到的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)
不过,这是个好主意。。。
上述解决方案可简化为:
此解决方案与
ItemIsEditable
解决方案的不同之处在于,您仍然可以选择并突出显示列中的项。尝试:
这对我来说是最后一次:-)
编辑:很抱歉这里没有详细介绍。当然,您需要应用于所需列中的每个项目,例如:
将第3列设置为该列中的只读项。高温高压
我用
QLineEditor
使它工作然后简单地使用它如下
相关问题 更多 >
编程相关推荐