mar*_*rat 1 python qt datamodel qtableview pyside
如何让QTableView单元格在编辑时保持其原始值?当我开始编辑单元格时,它会自动清除.我搜索了整个地方,我找不到任何会引导某个地方的指针.我的模型视图的实现:
class BlockViewModel(QAbstractTableModel):
def __init__(self, structure, data):
QAbstractTableModel.__init__(self)
self._data = data
self._struct = structure
for i, s in enumerate(structure):
cmnt = s['comment']
name = cmnt if cmnt else s['name']
self.setHeaderData(i, Qt.Horizontal, name)
def rowCount(self, parent=QModelIndex()):
return len(self._data)
def columnCount(self, parent = QModelIndex()):
return len(self._struct)
def data(self, index, role):
if role == Qt.DisplayRole:
try:
row = index.row()
col = index.column()
name = self._struct[col]['name']
return self._data[row][name]
except:
pass
elif role == Qt.CheckStateRole:
return None
return None
def flags(self, index):
flags = super(self.__class__,self).flags(index)
flags |= Qt.ItemIsEditable
flags |= Qt.ItemIsSelectable
flags |= Qt.ItemIsEnabled
flags |= Qt.ItemIsDragEnabled
flags |= Qt.ItemIsDropEnabled
return flags
def headerData(self, section, orientation, role = Qt.DisplayRole):
if role != Qt.DisplayRole:
return None
if orientation == Qt.Horizontal:
cmnt = self._struct[section]['comment']
return cmnt if cmnt else self._struct[section]['name']
else:
return str(section)
def setData(self, index, value, role=Qt.EditRole):
row = index.row()
col = index.column()
name = self._struct[col]['name']
self._data[row][name] = value
self.emit(SIGNAL('dataChanged()'))
return True
Run Code Online (Sandbox Code Playgroud)
该data方法负责始终显示您的数据.在编辑时,它使用EditRole.因此,修改您的data方法以显示EditRole相同的值,DisplayRole如下所示:
def data(self, index, role):
if role == Qt.DisplayRole or role == Qt.EditRole:
try:
row = index.row()
col = index.column()
name = self._struct[col]['name']
return self._data[row][name]
except:
pass
elif role == Qt.CheckStateRole:
return None
return None
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
3104 次 |
| 最近记录: |