From 10619fea0c5693b19390cfd2d3cc961ec5704731 Mon Sep 17 00:00:00 2001 From: "ZHANGXUXU\\95193" <951937200@qq.com> Date: Mon, 15 Dec 2025 21:00:31 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BF=AE=E5=A4=8Dmodbus=E5=8F=98=E9=87=8F?= =?UTF-8?q?=E6=B2=A1=E4=BF=9D=E5=AD=98=E6=97=B6=E7=9B=B4=E6=8E=A5=E5=88=A0?= =?UTF-8?q?=E9=99=A4=E5=90=8E=E5=8F=98=E9=87=8F=E7=B1=BB=E5=9E=8Bcombobox?= =?UTF-8?q?=E5=87=BA=E9=94=99=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- UI/ProjectManages/ProjectModel.py | 3 ++- UI/UserManage/UserModel.py | 3 ++- UI/VarManages/AnalogModel.py | 3 ++- UI/VarManages/HartModel.py | 3 ++- UI/VarManages/HartSimulateModel.py | 3 ++- UI/VarManages/ModbusModel.py | 35 +++++++++++++++++++++++++----- UI/VarManages/TCRTDModel.py | 3 ++- 7 files changed, 42 insertions(+), 11 deletions(-) diff --git a/UI/ProjectManages/ProjectModel.py b/UI/ProjectManages/ProjectModel.py index 5dc39a0..7df57a7 100644 --- a/UI/ProjectManages/ProjectModel.py +++ b/UI/ProjectManages/ProjectModel.py @@ -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('') diff --git a/UI/UserManage/UserModel.py b/UI/UserManage/UserModel.py index 01c39b0..b2a223a 100644 --- a/UI/UserManage/UserModel.py +++ b/UI/UserManage/UserModel.py @@ -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: diff --git a/UI/VarManages/AnalogModel.py b/UI/VarManages/AnalogModel.py index 53e3d90..ca43020 100644 --- a/UI/VarManages/AnalogModel.py +++ b/UI/VarManages/AnalogModel.py @@ -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, diff --git a/UI/VarManages/HartModel.py b/UI/VarManages/HartModel.py index 7ff031d..194f569 100644 --- a/UI/VarManages/HartModel.py +++ b/UI/VarManages/HartModel.py @@ -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: diff --git a/UI/VarManages/HartSimulateModel.py b/UI/VarManages/HartSimulateModel.py index c315edb..dcbf7d4 100644 --- a/UI/VarManages/HartSimulateModel.py +++ b/UI/VarManages/HartSimulateModel.py @@ -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: diff --git a/UI/VarManages/ModbusModel.py b/UI/VarManages/ModbusModel.py index fe8058d..ced5d1c 100644 --- a/UI/VarManages/ModbusModel.py +++ b/UI/VarManages/ModbusModel.py @@ -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() diff --git a/UI/VarManages/TCRTDModel.py b/UI/VarManages/TCRTDModel.py index 1d15903..d47142b 100644 --- a/UI/VarManages/TCRTDModel.py +++ b/UI/VarManages/TCRTDModel.py @@ -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,