修复modbus变量没保存时直接删除后变量类型combobox出错问题

main
ZHANGXUXU\95193 1 month ago
parent 5409ce7e3c
commit 10619fea0c

@ -337,7 +337,8 @@ class ProjectButtonDelegate(QItemDelegate):
sender.setIcon(qtawesome.icon('fa.pencil', color='#4c8cf2'))
# checkbox.setEnabled(False)
sender.isEdit = True
model.editableList.remove(sender.index[0])
if sender.index[0] in model.editableList:
model.editableList.remove(sender.index[0])
rowIndex = sender.index[0]
proMes = ProjectManage.getByName(name)
proMes.append('')

@ -254,7 +254,8 @@ class UserButtonDelegate(QItemDelegate):
QMessageBox.Yes)
return
sender.isEdit = True
model.editableList.remove(sender.index[0])
if sender.index[0] in model.editableList:
model.editableList.remove(sender.index[0])
if sender.oldName:
UserManage.editUser(userName = sender.oldName, Nname=name, userPwd = passwd, description = des, projectAuthority = projectAuthority, protocolSetting = protocolSetting, userAuthority = userAuthority, trendAuthority = trendAuthority)
else:

@ -153,7 +153,8 @@ class AnalogButtonDelegate(TcRtdButtonDelegate):
QMessageBox.Yes)
return
sender.isEdit = True
model.editableList.remove(source_row)
if source_row in model.editableList:
model.editableList.remove(source_row)
if sender.oldName:
if sender.oldName == name:
AnalogManage.editVar(name=sender.oldName, Nname=name, channelNumber = channelNumber,

@ -149,7 +149,8 @@ class HartButtonDelegate(BaseButtonDelegate):
QMessageBox.Yes)
return
sender.isEdit = True
model.editableList.remove(source_row)
if source_row in model.editableList:
model.editableList.remove(source_row)
if sender.oldName:
HartVarManage.editVar(name = sender.oldName, Nname = name, des = des)
else:

@ -192,7 +192,8 @@ class HartSimulateButtonDelegate(BaseButtonDelegate):
QMessageBox.Yes)
return
sender.isEdit = True
model.editableList.remove(source_row)
if source_row in model.editableList:
model.editableList.remove(source_row)
if sender.oldName:
HartSimulateVarManage.editVar(name = sender.oldName, Nname = name, des = des)
else:

@ -76,11 +76,31 @@ class VarTableModel(QAbstractTableModel):
def insert_data(self, x, index):
self.datas.insert(index, x)
self.checkList = ['Unchecked'] * len(self.datas)
# 更新 editableList插入行会导致索引 >= index 的值后移 1
new_editable = []
for r in self.editableList:
if r >= index:
new_editable.append(r + 1)
else:
new_editable.append(r)
self.editableList = new_editable
self.table.proxy.invalidate()
def remove_row(self, row):
self.datas.pop(row)
self.checkList = ['UnChecked'] * len(self.datas)
# 规范 checkList 的值,保持与其它地方一致的 'Unchecked'
self.checkList = ['Unchecked'] * len(self.datas)
# 更新 editableList移除被删行并将大于该行的索引减一
new_editable = []
for r in self.editableList:
if r == row:
# 被删除行,从 editableList 中移除
continue
elif r > row:
new_editable.append(r - 1)
else:
new_editable.append(r)
self.editableList = new_editable
self.table.proxy.invalidate()
def rowCount(self, parent: QModelIndex = ...) -> int:
@ -414,14 +434,16 @@ class ModbusButtonDelegate(BaseButtonDelegate):
fucationCbRow = str('cb' + str(source_row) + str(5))
fucationIndex = self.parent().model.index(source_row, 5)
fucationDelegate = self.parent().itemDelegate(fucationIndex)
fucationCheckbox = getattr(fucationDelegate, fucationCbRow)
# getattr 可能返回 None使用默认值避免 AttributeError
fucationCheckbox = getattr(fucationDelegate, fucationCbRow, None)
if sender.isEdit:
sender.setIcon(qtawesome.icon('fa.save', color='#1fbb6f'))
sender.isEdit = False
sender.oldName = model.datas[source_row][3]
model.editableList.append(source_row)
fucationCheckbox.setEnabled(True)
if fucationCheckbox:
fucationCheckbox.setEnabled(True)
self.parent().viewport().update()
else:
@ -508,9 +530,12 @@ class ModbusButtonDelegate(BaseButtonDelegate):
model.remove_row(source_row + 1)
sender.isEdit = True
fucationCheckbox.setEnabled(False)
if fucationCheckbox:
fucationCheckbox.setEnabled(False)
# varModelCheckbox.setEnabled(False)
model.editableList.remove(source_row)
# 有可能在删除/其他操作后该索引已不存在,先检查再移除
if source_row in model.editableList:
model.editableList.remove(source_row)
self.parent().viewport().update()

@ -283,7 +283,8 @@ class TcRtdButtonDelegate(BaseButtonDelegate):
QMessageBox.Yes)
return
sender.isEdit = True
model.editableList.remove(source_row)
if source_row in model.editableList:
model.editableList.remove(source_row)
if sender.oldName:
if sender.oldName == name:
TcRtdManage.editVar(name=sender.oldName, Nname=name, channelNumber = channelNumber, des=des,

Loading…
Cancel
Save