From 2fc4ea7e40382ad0f52e3e181c4e3cb17792f780 Mon Sep 17 00:00:00 2001 From: zhangxuxutm <951937200@qq.com> Date: Sun, 10 Sep 2023 16:53:04 +0800 Subject: [PATCH] 0910C --- UI/AreaTabWidget.py | 34 ++++++++++++++++++++---------- UI/MainWindow.py | 4 ++-- model/ProjectModel/DeviceManage.py | 14 ++++++++++++ 3 files changed, 39 insertions(+), 13 deletions(-) diff --git a/UI/AreaTabWidget.py b/UI/AreaTabWidget.py index c808714..b5cd603 100644 --- a/UI/AreaTabWidget.py +++ b/UI/AreaTabWidget.py @@ -21,8 +21,8 @@ class AreaTabWidget(QMainWindow): # 设置主窗口的中心部分为 QTabWidget self.setCentralWidget(self.areaTabWidget) - def initAreaTab(self, dataType, order, channelBytes, deviceName = False): - widgetList = self.addAreaTab(deviceName) + def initAreaTab(self, dataType, order, channelBytes): + widgetList = self.addAreaTab() widgetList[0].setCurrentIndex(dataType) widgetList[1].setCurrentIndex(order) widgetList[2].setText(channelBytes) @@ -30,7 +30,7 @@ class AreaTabWidget(QMainWindow): self.addAreaWidget(widgetList) - def addAreaTab(self, deviceName): + def addAreaTab(self): areaTabWidget = QWidget() tabIndex = self.areaTabWidget.count() @@ -78,16 +78,15 @@ class AreaTabWidget(QMainWindow): delAreaBtn.clicked.connect(self.removeAreaTab) - widgetList.extend([dataTypeCombox, orderCombox, byteLineEdit, areaLayout, deviceName]) + widgetList.extend([dataTypeCombox, orderCombox, byteLineEdit, areaLayout]) areaTabWidget.setLayout(mainLayout) - return widgetList def removeAreaTab(self): # 获取 QTabWidget 并从中删除标签页 deviceName = self.areaTabWidget.parent().parent().parent().parent().parent().windowTitle() index = self.areaTabWidget.currentIndex() - print(index) + if index != -1: self.areaTabWidget.removeTab(index) @@ -100,16 +99,21 @@ class AreaTabWidget(QMainWindow): order = self.dataTypeTranslate(widgetList[1].currentText()) byteLineEdit = widgetList[2].text() areaLayout = widgetList[3] - deviceName = widgetList[4] + deviceName = self.areaTabWidget.parent().parent().parent().parent().parent().windowTitle() + while areaLayout.count(): + item = areaLayout.takeAt(0) + widget = item.widget() + if widget: + widget.setParent(None) if len(byteLineEdit) == 0: QMessageBox.warning(self, '警告', '请输入字节长度。') else: - for i in range(3): - widgetList[i].setEnabled(False) + # for i in range(3): + # widgetList[i].setEnabled(False) if dataType in ['AI', 'AO']: @@ -166,8 +170,16 @@ class AreaTabWidget(QMainWindow): self.widgetList.append([areaLabel2, areaLineEdit, editbtn]) areaLayout.addItem(self.verticalSpacer, int(byteLineEdit) * 8 ,0) - if deviceName: - DevicesManange.addAreas(dataType, order, byteLineEdit, deviceName) + + index = self.areaTabWidget.currentIndex() + 1 + areaId = DevicesManange.getAreaID(deviceName) + + if index in areaId: + DevicesManange.updataAreas(dataType, order, byteLineEdit, deviceName, index) + else: + DevicesManange.addAreas(dataType, order, byteLineEdit, deviceName) + + def dataTypeTranslate(self, order): self.dataTypeDict = {'不转换': 'ABCD', '字节转换': 'DCBA', '字转换': 'CDAB', '字内转换': 'BADC'} diff --git a/UI/MainWindow.py b/UI/MainWindow.py index 4ad5ce6..eabe6a0 100644 --- a/UI/MainWindow.py +++ b/UI/MainWindow.py @@ -80,7 +80,7 @@ class MainWindow(QMainWindow): areaMainWindow.addToolBar(toolbar) addAreaBtn = QAction("添加通道", areaMainWindow) addAreaBtn.setObjectName("addDiviceBtn") - addAreaBtn.triggered.connect(lambda: areaTabWidget.addAreaTab(windowTitle)) + addAreaBtn.triggered.connect(areaTabWidget.addAreaTab) toolbar.addAction(addAreaBtn) #为mainwindow添加右滑动条 @@ -113,7 +113,7 @@ class MainWindow(QMainWindow): for area in areas: dataType, order = self.tran(area["type"], area["order"]) channelBytes = area["bytes"] - print(dataType, type(dataType)) + areaTabWidget.initAreaTab(dataType, order, channelBytes) def createDeciveWidget(self): diff --git a/model/ProjectModel/DeviceManage.py b/model/ProjectModel/DeviceManage.py index 152a0b6..469cde1 100644 --- a/model/ProjectModel/DeviceManage.py +++ b/model/ProjectModel/DeviceManage.py @@ -160,6 +160,20 @@ class DevicesManange(): areaJson = json.dumps(jsonCon) DeviceDB.update(areaJson=areaJson).where(DeviceDB.deviceName == deviceName).execute() + @classmethod + def updataAreas(self, type, order, bytes, deviceName, index): + if DeviceDB.getByName(deviceName=deviceName) is None: + return False + else: + jsonCon = json.loads(DeviceDB.getByName(deviceName=deviceName).areaJson) + for area in jsonCon: + if index == area["id"]: + area["type"] = type + area["order"] = order + area["bytes"] = bytes + areaJson = json.dumps(jsonCon) + DeviceDB.update(areaJson=areaJson).where(DeviceDB.deviceName == deviceName).execute() + @classmethod def getAreaID(self, deviceNames): deviceName = deviceNames