From f88125f49dcd7eb3967f6428fbf12e9e7d1b19c6 Mon Sep 17 00:00:00 2001 From: zcwBit Date: Tue, 5 Sep 2023 17:37:01 +0800 Subject: [PATCH] 0905c --- UI/DelAreaWidget.py | 19 +-- UI/MainWindow.py | 178 ++++++++++++++--------------- model/ProjectModel/DeviceManage.py | 21 ++-- 3 files changed, 98 insertions(+), 120 deletions(-) diff --git a/UI/DelAreaWidget.py b/UI/DelAreaWidget.py index 163d771..fd57735 100644 --- a/UI/DelAreaWidget.py +++ b/UI/DelAreaWidget.py @@ -15,10 +15,14 @@ class DelAreaWidget(QDialog): self.deviceName = deviceName self.delAreaRowAndColunm = [] self.initUI() + + self.intType = 0 + self.foloatType = 1 def initUI(self): vorlayout = QVBoxLayout() #主布局 # layout = QGridLayout() jsonCons = Device().getAreaJson(self.deviceName) + row = 1 if jsonCons is None: return @@ -35,21 +39,6 @@ class DelAreaWidget(QDialog): row += 1 - # for i in self.areaLabel: - # if self.deviceName in i: - # widget = i[2] - # row = i[3] - # text = widget.text() - # column = i[4] - # checkbox = QCheckBox(text) - # - # if column > 0: - # vorlayout.addWidget(checkbox) - # - # else: - # vorlayout.addWidget(checkbox) - # self.checkbox_data[checkbox] = [row, column] - button_box = QDialogButtonBox(QDialogButtonBox.Ok | QDialogButtonBox.Cancel) ok_button = button_box.button(QDialogButtonBox.Ok) ok_button.setText("确定") # 设置Ok按钮的文本 diff --git a/UI/MainWindow.py b/UI/MainWindow.py index 7b825cd..3208733 100644 --- a/UI/MainWindow.py +++ b/UI/MainWindow.py @@ -33,9 +33,8 @@ class MainWindow(QMainWindow): self.sub_windows = [] #存储设备widget self.nowValue = [] #储存当前值 self.areaLabel = [] #存储通道信息文本 - self.arealist = {} + self.areaDict = {} self.widgetList= [] - self.arealists = [] self.initUI() self.initAreaWidget() @@ -143,14 +142,14 @@ class MainWindow(QMainWindow): channelNums = area["nums"] channelBytes = area["bytes"] areaID = area['id'] - print(masterSlaveModel) if masterSlaveModel == '主站': - self.addChannelWidget(deviceName, number, channelNums, channelBytes, varType, layout, areaID) + self.addAreaWidget(deviceName, number, channelNums, channelBytes, varType, layout, areaID) else: - self.addChannelWidget(deviceName, number, channelNums, channelBytes, varType, layout, areaID) + self.addAreaWidget(deviceName, number, channelNums, channelBytes, varType, layout, areaID) number = number + int(channelNums) - self.nowValue.append(self.arealist) - print(self.nowValue, 'aaaaaa') + self.nowValue.append(self.areaDict) + + def createDeciveWidget(self): @@ -175,22 +174,19 @@ class MainWindow(QMainWindow): number = DevicesManange.getChannelLength(deviceName) Device().addAreas(varType, channelNums, channelBytes, deviceName) areaId = Device().getAreaID(deviceName)[-1] - # Device().addDevice(deviceName, channelNums, channelBytes) else: return layout = sub_window.widget().widget().layout().itemAt(1).widget().layout() #获取sub_window的widgetArea的areaLayout2 - self.addChannelWidget(deviceName, number, channelNums, channelBytes, varType, layout, areaId) + self.addAreaWidget(deviceName, number, channelNums, channelBytes, varType, layout, areaId) number += int(channelNums) - # self.nowValue.append(self.arealist) - - def addChannelWidget(self,deviceNames, numbers, channelNums, channelBytes , varTypes, layouts ,ID): + def addAreaWidget(self,deviceNames, numbers, channelNums, channelBytes , varTypes, layouts ,ID): deviceName = deviceNames number = numbers channelNum = channelNums @@ -200,7 +196,6 @@ class MainWindow(QMainWindow): ID = ID widgetList = [] - for i in range(int(channelNum)): if (i + number) % 2 == 0: areaLabel = QLabel(varType + str(i + 1 ) + ": " + channelByte + 'Byte' ) @@ -216,11 +211,6 @@ class MainWindow(QMainWindow): editbtn.clicked.connect(lambda checked, btn=editbtn: self.forceEdit(btn)) widgetList.append([layout, ID, editbtn, areaLabel, areaLabel2, areaLineEdit]) - - - # self.nowValue.append([deviceName, layout, ID, editbtn, areaLabel, areaLabel2, areaLineEdit, (i + number)//2, (i + number) % 2 + 1]) - - else: areaLabel = QLabel(varType + str(i + 1) + ": " + channelByte + 'Byte') areaLabel2 = QLabel('0') @@ -235,100 +225,104 @@ class MainWindow(QMainWindow): editbtn.clicked.connect(lambda checked, btn=editbtn: self.forceEdit(btn)) widgetList.append([layout, ID, editbtn, areaLabel, areaLabel2, areaLineEdit]) - self.arealists.append(widgetList) - self.arealist[deviceName] = self.arealists - - - # self.nowValue.append([deviceName, layout, ID, editbtn, areaLabel, areaLabel2, areaLineEdit, (i + number) // 2, (i + number) % 2 + 4]) - + if not self.areaDict.get(deviceName): + self.areaDict[deviceName] = [widgetList] + else: + self.areaDict[deviceName].append(widgetList) + + def delAreaWidget(self, subWindow): - def forceEdit(self, btn): - pass - # for item in self.nowValue: - # if btn in item: - # item[4].setText(item[5].text()) + subwindow = subWindow + deviceName = sub_window.windowTitle() + areaLayout = sub_window.widget().widget().layout().itemAt(1).widget().layout() - def delAreaWidget(self, sub_window): - subwindow = sub_window if self.nowValue: - self.deviceName = subwindow.windowTitle() - delAreaWidget = DelAreaWidget(self.deviceName) + + deviceName = subwindow.windowTitle() + delAreaWidget = DelAreaWidget(deviceName) + if delAreaWidget.exec_() == QDialog.Accepted: rowAndColumn = delAreaWidget.getDelAreaRowAndColunm() + rowAndColumn.reverse() + if rowAndColumn == []: return else: - self.getAreaWidget(rowAndColumn, subwindow) - Device().delAreas(self.deviceName,rowAndColumn) + for areaId in rowAndColumn: + for devicelist in self.nowValue: + areas = devicelist[deviceName][:] + area = areas[areaId - 1] + for are in area: + for widget in range(2, 6): + areaLayout.removeWidget(are[widget]) + are[widget].deleteLater() + devicelist[deviceName].remove(area) + + Device().delAreas(deviceName,rowAndColumn) + # self.updateLayout(areaLayout) + else: return else: return + def updateLayout(self, areaLayout): + + for devicelist in self.nowValue: + for key in devicelist: + areas = devicelist[key] + print(areas,'vvvvvv') + for area in areas: + for widgets in area: + for widget in range(2, 6): + + areaLayout.removeWidget(widgets[widget]) + widgets[widget].deleteLater() + + for devicelist in self.nowValue: + for key in devicelist: + areas = devicelist[key] + i = 0 + for area in areas: + if i // 2 == 0: + pass + + + - def getAreaWidget(self, rowAndColumn, sub_window): - subwindow = sub_window - areaLayout = subwindow.widget().widget().layout().itemAt(1).widget().layout() - deviceName = subwindow.windowTitle() - print(self.nowValue,'old') - for areaId in rowAndColumn: - for devicelist in self.nowValue: - areas = devicelist[deviceName] - area = areas[areaId - 1] - for are in area: - for widget in range(2, 6): - areaLayout.removeWidget(are[widget]) - are[widget].deleteLater() - areas.remove(area) - print(self.nowValue, 'now') - - # for area in areas: - # for widget in range(2, 6): - # print(widget) - # print(area[widget]) - # area[widget].deleteLater() - # areaLayout.removeWidget(area[widget]) - # self.nowValue.remove(areaS) - # # print(self.nowValue) - - - - # print(rowAndColumn,'sssss') - # for areaId in rowAndColumn: - # for nowWidget in self.nowValue: - # if nowWidget[0] == deviceName and nowWidget[2] == areaId: - # for widget in range(3, 7): - # - # areaLayout.removeWidget(nowWidget[widget]) - # nowWidget[widget].deleteLater() - # delAreaWidgetList.append(nowWidget) - - - - # for widget in delAreaWidgetList: #从列表中删除已删除的部件 - # self.nowValue.remove(widget) - - - #重置area的id - # i = 1 - # j = 1 - # for nowWidget in self.nowValue: - # if nowWidget[0] == deviceName: - # if nowWidget[2] == j: - # index = nowWidget.index(nowWidget[2]) - # nowWidget[index] = i - # else: - # j = nowWidget[2] - # i += 1 - # index = nowWidget.index(nowWidget[2]) - # nowWidget[index] = i + + + def forceEdit(self, btn): + forceValue = [] + for devicelist in self.nowValue: + for key in devicelist: + areas = devicelist[key] + print(areas,'vvvvvv') + for area in areas: + for widgets in area: + if btn in widgets: + widgets[4].setText(widgets[5].text()) + forceValue + + # for item in self.nowValue: + # if btn in item: + # item[4].setText(item[5].text()) + def writeValue(self): + for deviceNames in self.sub_windows: + deviceName = deviceNames.windowTitle() + areas = [[1,2,3,4,5],[2,3,4,5]] + for area in areas: + pass + + def startProtocol(self): - a = [] + + self.writeValue() for i in range(len(self.nowValue)): a.append(i) diff --git a/model/ProjectModel/DeviceManage.py b/model/ProjectModel/DeviceManage.py index 4b3b5ce..1eb0831 100644 --- a/model/ProjectModel/DeviceManage.py +++ b/model/ProjectModel/DeviceManage.py @@ -40,24 +40,20 @@ class Device(): def writeAreas(self): pass - def delAreas(self, deviceNames, ids): + def delAreas(self, deviceName, ids): + jsonCon = json.loads(DeviceDB.getByName(deviceName=deviceName).areaJson) for id in ids: + jsonCon.pop(id - 1) - deviceName = deviceNames - jsonCon = json.loads(DeviceDB.getByName(deviceName=deviceName).areaJson) - print(jsonCon[id - 1]) - - jsonCon.remove(jsonCon[id - 1]) if jsonCon == []: areaJson = None DeviceDB.update(areaJson=areaJson).where(DeviceDB.deviceName == deviceName).execute() else: - i = 1 - for areajsonId in jsonCon: - areajsonId["id"] = i - i += 1 + for index, areajsonId in enumerate(jsonCon): + areajsonId["id"] = index + 1 areaJson = json.dumps(jsonCon) + DeviceDB.update(areaJson=areaJson).where(DeviceDB.deviceName == deviceName).execute() @@ -121,7 +117,7 @@ class DevicesManange(): byte = (bytes + 1) // 2 salveByteLong += int(numbers) * (byte) self.slaveDevices[devices] = salveByteLong - print(self.masterDevices,self.slaveDevices,'分别返回PA和DP度') + def addDevice(self, deviceName,channelNums, channelBytes): channelBytes = int(channelBytes) @@ -138,7 +134,6 @@ class DevicesManange(): elif '从站' in deviceName: self.slaveDevices[deviceName] = int(channelNums) * int(channelBytes) - # print(self.masterDevices,self.slaveDevices,'分别返回PA和DP每个主站寄存器地址的总长度') return self.masterDevices, self.slaveDevices #分别返回PA和DP每个设备的字节的总长度 @classmethod @@ -163,7 +158,7 @@ class DevicesManange(): for key in self.masterDevices: masterAddressList[key] = int(masterAddress) masterAddress = int(self.masterDevices[key]) + masterAddress - print(self.masterDevices[key],'dddd') + for key in self.slaveDevices: slaveAddressList[key] = int(slaveAddress) slaveAddress = int(self.slaveDevices[key]) + slaveAddress