+-

我想在我的表中将列设置为只读!我尝试了所有可能的标志组合而没有成功
item = QtGui.QTableWidgetItem()
from operator import xor
item.setFlags(xor(item.flags(),QtCore.Qt.ItemIsEditable))
self.Table.setHorizontalHeaderItem(4, item)
我也尝试过,而不是!=和^运算符,但列项仍然可以编辑
更新
我想我误解了这个!我想当我将一个列的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,每次插入或创建新行时都会添加该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())
在MainWindow
self.Size = QTableWidgetDisabledItem(self.MyTable)
self.MyTable.setItemDelegateForColumn(4,self.Size)
虽然这是个好主意……
最佳答案
我使用QLineEditor工作了
class QTableWidgetDisabledItem(QtGui.QItemDelegate):
"""
Create a readOnly QTableWidgetItem
"""
def __init__(self, parent):
QtGui.QItemDelegate.__init__(self, parent)
def createEditor(self, parent, option, index):
item = QtGui.QLineEdit(parent)
item.setReadOnly(True)
#item.setEnabled(False)
return item
def setEditorData(self, editor, index):
editor.blockSignals(True)
editor.setText(index.model().data(index))
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)
点击查看更多相关文章
转载注明原文:在`QTableWidget`中设置整个列只读在python中 - 乐贴网