From 2bf99409617d9ac99c1e9ac9c3fb254547e5e975 Mon Sep 17 00:00:00 2001 From: zhangxuxutm <951937200@qq.com> Date: Sun, 3 Sep 2023 18:11:53 +0800 Subject: [PATCH] 0903 --- UI/AreaSettingWidget.py | 18 +- UI/DeviceWidget.py | 22 +- UI/MainWindow.py | 247 ++++++++++-------- .../AreaSettingWidget.cpython-310.pyc | Bin 1730 -> 2106 bytes UI/__pycache__/DeviceWidget.cpython-310.pyc | Bin 1893 -> 2365 bytes model/ProjectModel/AreaManage.py | 2 +- .../__pycache__/AreaManage.cpython-310.pyc | Bin 3294 -> 3239 bytes 7 files changed, 174 insertions(+), 115 deletions(-) diff --git a/UI/AreaSettingWidget.py b/UI/AreaSettingWidget.py index 52463de..c53eaaa 100644 --- a/UI/AreaSettingWidget.py +++ b/UI/AreaSettingWidget.py @@ -1,7 +1,7 @@ -from PyQt5.QtWidgets import QDialog, QFormLayout, QLineEdit, QComboBox, QDialogButtonBox, QApplication +from PyQt5.QtWidgets import QDialog, QFormLayout, QLineEdit, QComboBox, QDialogButtonBox, QApplication, QMessageBox import sys - +import re class AreaSettingWidget(QDialog): def __init__(self, parent=None): super().__init__(parent) @@ -26,9 +26,11 @@ class AreaSettingWidget(QDialog): button_box = QDialogButtonBox(QDialogButtonBox.Ok | QDialogButtonBox.Cancel) - button_box.accepted.connect(self.accept) + button_box.accepted.connect(self.check_input) button_box.rejected.connect(self.reject) + + layout.addRow(button_box) self.setLayout(layout) @@ -41,6 +43,16 @@ class AreaSettingWidget(QDialog): return varType, channelNums, channelBytes + def check_input(self): + varType, channelNums, channelBytes = self.getParameters() + + if not channelNums or not channelBytes: + QMessageBox.warning(self, '警告', '有值未输入。') + elif not re.match(r'^[-+]?\d*\.?\d*$', channelNums) or not re.match(r'^[-+]?\d*\.?\d*$', channelBytes): + QMessageBox.warning(self, '警告', '请输入数字。') + else: + self.accept() # 所有输入都是数字且不为空时接受对话框 + if __name__ == '__main__': app = QApplication(sys.argv) window = AreaSettingWidget() diff --git a/UI/DeviceWidget.py b/UI/DeviceWidget.py index aa7b4a8..85e5ea1 100644 --- a/UI/DeviceWidget.py +++ b/UI/DeviceWidget.py @@ -1,7 +1,7 @@ -from PyQt5.QtWidgets import QDialog, QFormLayout, QLineEdit, QComboBox, QDialogButtonBox +from PyQt5.QtWidgets import QDialog, QFormLayout, QLineEdit, QComboBox, QDialogButtonBox, QMessageBox import sys - +import re class DeviceDialog(QDialog): def __init__(self, parent=None): super().__init__(parent) @@ -37,13 +37,13 @@ class DeviceDialog(QDialog): button_box = QDialogButtonBox(QDialogButtonBox.Ok | QDialogButtonBox.Cancel) - button_box.accepted.connect(self.accept) + button_box.accepted.connect(self.check_input) button_box.rejected.connect(self.reject) layout.addRow(button_box) self.setLayout(layout) - self.setWindowTitle("Input Parameters") + self.setWindowTitle("设备信息") def getParameters(self): proType = self.findChild(QComboBox, "ProtocolType").currentText() @@ -52,4 +52,16 @@ class DeviceDialog(QDialog): pvUpperLimit = self.findChild(QLineEdit, "pvUpperLimit").text() pvLowerLimit = self.findChild(QLineEdit, "pvLowerLimit").text() pvUnit = self.findChild(QLineEdit, "pvUnit").text() - return deviceName, proType, masterSlaveModel, pvUpperLimit, pvLowerLimit, pvUnit \ No newline at end of file + return deviceName, proType, masterSlaveModel, pvUpperLimit, pvLowerLimit, pvUnit + + def check_input(self): + deviceName, proType, masterSlaveModel, pvUpperLimit, pvLowerLimit, pvUnit = self.getParameters() + + if not pvUpperLimit or not pvLowerLimit or not pvUnit or not deviceName: + QMessageBox.warning(self, '警告', '有值未输入。') + elif not re.match(r'^[-+]?\d*\.?\d*$', pvUpperLimit) or not re.match(r'^[-+]?\d*\.?\d*$', pvLowerLimit): + QMessageBox.warning(self, '警告', '请输入数字。') + elif pvUpperLimit < pvLowerLimit: + QMessageBox.warning(self, '警告', '量程输入有误。') + else: + self.accept() # 所有输入都是数字且不为空时接受对话框 \ No newline at end of file diff --git a/UI/MainWindow.py b/UI/MainWindow.py index b449f6d..47f793b 100644 --- a/UI/MainWindow.py +++ b/UI/MainWindow.py @@ -7,28 +7,27 @@ from PyQt5.QtWidgets import QApplication, QMainWindow, QToolBar, QMdiArea, QActi QMdiSubWindow, QDialogButtonBox, QWidget, QComboBox, QTabBar, QTabWidget, QGridLayout, QLabel, QPushButton, QSpacerItem, QSizePolicy, QHBoxLayout, QTableWidget, QScrollArea from PyQt5 import QtCore from DeviceWidget import * -from AreaWidget import AreaWidget from UI.AreaSettingWidget import AreaSettingWidget -from model.ProjectModel.AreaManage import Devices, DevicesManange, Area +from UI.DelAreaWidget import DelAreaWidget +# from model.ProjectModel.AreaManage import Devices, DevicesManange, Area from protocol.ModBus.ModBusThread import MyThread from utils.DBModels.BaseModel import * -from utils.DBModels.ClientModels import DeviceDB -from model.ClientModel.Client import Client +# from utils.DBModels.ClientModels import DeviceDB +# from model.ClientModel.Client import Client class MainWindow(QMainWindow): def __init__(self): super().__init__() - self.initUI() - self.area = Area() - self.number = 0 - self.labelText = [] - self.lineEditText = [] - self.devicesmanage = DevicesManange() - self.sub_windows = [] - self.initAreaWidget() - self.getTextValue() + + self.sub_windows = [] #存储设备widget + self.nowValue = [] #储存当前值 + self.areaLabel = [] #存储通道信息文本 + # self.initAreaWidget() + + self.number = 0 + self.initUI() def initUI(self): self.toolbar = QToolBar() @@ -54,49 +53,49 @@ class MainWindow(QMainWindow): # self.mdi_area.setTabsMovable(True) - self.setWindowTitle("Main Window") + self.setWindowTitle("PROFIBUS") self.setGeometry(1000, 500, 800, 600) - def initAreaWidget(self): - alldevices = Devices().getAllDevice() - - for devices in alldevices: - layout = self.deviceWidget(devices[0]).widget().widget().layout().itemAt(1).widget().layout() - areas = devices[3] - number = 0 - masterSlaveModel = devices[2] - if areas is not None: - areas = json.loads(areas) - for area in areas: - varType = area["type"] - channelNums = area["nums"] - channelBytes = area["bytes"] - for i in range(int(channelNums)): - if masterSlaveModel == '主站': - if (i + number) % 2 == 0: - layout.addWidget(QLabel(varType + str(i + 1) + ": " + channelBytes + 'Byte'), (i + number) // 2, - (i + number) % 2) - layout.addWidget(QLabel('0'), (i + number) // 2, (i + number) % 2 + 1) - layout.addWidget(QLineEdit('0'), (i + number) // 2, (i + number) % 2 + 2) - - else: - layout.addWidget(QLabel(varType + str(i + 1) + ": " + channelBytes + 'Byte'), (i + number) // 2, - (i + number) % 2 + 3) - layout.addWidget(QLabel('0'), (i + number) // 2, (i + number) % 2 + 4) - layout.addWidget(QLineEdit('0'), (i + number) // 2, (i + number) % 2 + 5) - else: - if (i + number) % 2 == 0: - layout.addWidget(QLabel(varType + str(i + 1) + ": " + channelBytes + 'Byte'), (i + number) // 2, - (i + number) % 2) - layout.addWidget(QLabel('0'), (i + number) // 2, (i + number) % 2 + 1) - layout.addWidget(QLineEdit('0'), (i + number) // 2, (i + number) % 2 + 2) - else: - layout.addWidget(QLabel(varType + str(i + 1) + ": " + channelBytes + 'Byte'), (i + number) // 2, - (i + number) % 2 + 3) - layout.addWidget(QLabel('0'), (i + number) // 2, (i + number) % 2 + 4) - layout.addWidget(QLineEdit('0'), (i + number) // 2, (i + number) % 2 + 5) - - number = number + int(channelNums) + # def initAreaWidget(self): + # alldevices = Devices().getAllDevice() + # + # for devices in alldevices: + # layout = self.deviceWidget(devices[0]).widget().widget().layout().itemAt(1).widget().layout() + # areas = devices[3] + # number = 0 + # masterSlaveModel = devices[2] + # if areas is not None: + # areas = json.loads(areas) + # for area in areas: + # varType = area["type"] + # channelNums = area["nums"] + # channelBytes = area["bytes"] + # for i in range(int(channelNums)): + # if masterSlaveModel == '主站': + # if (i + number) % 2 == 0: + # layout.addWidget(QLabel(varType + str(i + 1) + ": " + channelBytes + 'Byte'), (i + number) // 2, + # (i + number) % 2) + # layout.addWidget(QLabel('0'), (i + number) // 2, (i + number) % 2 + 1) + # layout.addWidget(QLineEdit('0'), (i + number) // 2, (i + number) % 2 + 2) + # + # else: + # layout.addWidget(QLabel(varType + str(i + 1) + ": " + channelBytes + 'Byte'), (i + number) // 2, + # (i + number) % 2 + 3) + # layout.addWidget(QLabel('0'), (i + number) // 2, (i + number) % 2 + 4) + # layout.addWidget(QLineEdit('0'), (i + number) // 2, (i + number) % 2 + 5) + # else: + # if (i + number) % 2 == 0: + # layout.addWidget(QLabel(varType + str(i + 1) + ": " + channelBytes + 'Byte'), (i + number) // 2, + # (i + number) % 2) + # layout.addWidget(QLabel('0'), (i + number) // 2, (i + number) % 2 + 1) + # layout.addWidget(QLineEdit('0'), (i + number) // 2, (i + number) % 2 + 2) + # else: + # layout.addWidget(QLabel(varType + str(i + 1) + ": " + channelBytes + 'Byte'), (i + number) // 2, + # (i + number) % 2 + 3) + # layout.addWidget(QLabel('0'), (i + number) // 2, (i + number) % 2 + 4) + # layout.addWidget(QLineEdit('0'), (i + number) // 2, (i + number) % 2 + 5) + # + # number = number + int(channelNums) def deviceWidget(self, windowTitle): @@ -116,7 +115,6 @@ class MainWindow(QMainWindow): widgetArea.setLayout(areaLayout2) newbtn = QPushButton('New') - editbtn = QPushButton('修改') delbth = QPushButton('删除') self.horizontalSpacer = QSpacerItem(40, 20, QSizePolicy.Expanding, QSizePolicy.Minimum) @@ -124,12 +122,10 @@ class MainWindow(QMainWindow): horizontalLayout.addWidget(newbtn) horizontalLayout.addItem(self.horizontalSpacer) - horizontalLayout.addWidget(editbtn) horizontalLayout.addWidget(delbth) newbtn.clicked.connect(lambda: self.newAreaWidget(sub_window)) - editbtn.clicked.connect(self.editAreaWidget) - delbth.clicked.connect(self.deleteAreaWidget) + delbth.clicked.connect(lambda: self.delAreaWidget(sub_window)) areaLayout1.addLayout(horizontalLayout, 0, 0, 1, 1) areaLayout1.addWidget(widgetArea, 1, 0, 1, 1) @@ -140,12 +136,12 @@ class MainWindow(QMainWindow): scroll_widget.setWidget(widget) sub_window.setWindowTitle(windowTitle) - sub_window.setGeometry(100, 100, 400, 300) + sub_window.setGeometry(0, 0, 600, 500) sub_window.setWidget(scroll_widget) self.mdi_area.addSubWindow(sub_window) # 将子窗口添加到MDI区域 # self.mdi_area.subWindowActivated.connect(self.adjustMdiAreaSize) - # self.sub_window.append(sub_window) + sub_window.show() self.sub_windows.append(sub_window) @@ -158,77 +154,116 @@ class MainWindow(QMainWindow): dialog = DeviceDialog() if dialog.exec_() == QDialog.Accepted: deviceName, proType, masterSlaveModel, pvUpperLimit, pvLowerLimit, pvUnit = dialog.getParameters() - windowTitle = deviceName + proType + ' ' + masterSlaveModel - DeviceDB().createDevice(deviceName = windowTitle, proType = proType, masterSlaveModel = masterSlaveModel, pvUpperLimit=pvUpperLimit, pvLowerLimit=pvLowerLimit, pvUnit=pvUnit) + windowTitle = deviceName + ' ' + proType + masterSlaveModel + ' ' + pvLowerLimit + '-' + pvUpperLimit + pvUnit + # DeviceDB().createDevice(deviceName = windowTitle, proType = proType, masterSlaveModel = masterSlaveModel, pvUpperLimit=pvUpperLimit, pvLowerLimit=pvLowerLimit, pvUnit=pvUnit) else: return - self.areaWidget(windowTitle) + self.deviceWidget(windowTitle) def newAreaWidget(self, sub_window): deviceName = sub_window.windowTitle() + dialog = AreaSettingWidget() if dialog.exec_() == QDialog.Accepted: varType, channelNums, channelBytes = dialog.getParameters() - devices = Devices() - number = devices.getValueLength(deviceName) - devices.addAreas(varType, channelNums, channelBytes, deviceName) - self.devicesmanage.addDevice(deviceName, channelNums, channelBytes) + # devices = Devices() + # number = devices.getValueLength(deviceName) + # devices.addAreas(varType, channelNums, channelBytes, deviceName) + # self.devicesmanage.addDevice(deviceName, channelNums, channelBytes) else: return layout = sub_window.widget().widget().layout().itemAt(1).widget().layout() #获取sub_window的widgetArea的areaLayout2 - + number = self.number #待从数据库获取具体的数据 for i in range(int(channelNums)): if (i + number) % 2 == 0: - layout.addWidget(QLabel(varType + str(i + 1 ) + ": " + channelBytes + 'Byte' ) , (i + number)//2, (i + number) % 2) - layout.addWidget(QLabel('0'), (i + number)//2, (i + number) % 2 + 1 ) - layout.addWidget(QLineEdit('0'), (i + number)//2, (i + number) % 2 + 2 ) + areaLabel = QLabel(varType + str(i + 1 ) + ": " + channelBytes + 'Byte' ) + areaLabel2 =QLabel('0') + areaLineEdit = QLineEdit('0') + editbtn = QPushButton('强制') + layout.addWidget(areaLabel , (i + number)//2, (i + number) % 2) + layout.addWidget(areaLabel2, (i + number)//2, (i + number) % 2 + 1 ) + layout.addWidget(areaLineEdit, (i + number)//2, (i + number) % 2 + 2 ) + layout.addWidget(editbtn, (i + number) // 2, (i + number) % 2 + 3) - else: - layout.addWidget(QLabel(varType + str(i + 1 ) + ": " + channelBytes + 'Byte'), (i + number) // 2, (i + number) % 2 + 3) - layout.addWidget(QLabel('0'), (i + number) // 2, (i + number) % 2 + 4) - layout.addWidget(QLineEdit('0'), (i + number) // 2, (i + number) % 2 + 5) - - layout.addItem(self.verticalSpacer) - + editbtn.clicked.connect(lambda checked, btn=editbtn: self.forceEdit(btn)) - + self.nowValue.append([deviceName, layout, i+1, editbtn, areaLabel2, areaLineEdit, (i + number)//2, (i + number) % 2 + 1]) + self.areaLabel.append([deviceName, i+1, areaLabel, (i + number)//2, (i + number) % 2]) - - def editAreaWidget(self): - l = len(self.area.masterValues) - for x in range(l): - self.labelText[x][0].setText(str(self.area.masterValues[x])) + else: + areaLabel = QLabel(varType + str(i + 1) + ": " + channelBytes + 'Byte') + areaLabel2 = QLabel('0') + areaLineEdit = QLineEdit('0') + editbtn = QPushButton('强制') + + layout.addWidget(areaLabel, (i + number) // 2, (i + number) % 2 + 3) + layout.addWidget(areaLabel2, (i + number) // 2, (i + number) % 2 + 4) + layout.addWidget(areaLineEdit, (i + number) // 2, (i + number) % 2 + 5) + layout.addWidget(editbtn, (i + number) // 2, (i + number) % 2 + 6) + + editbtn.clicked.connect(lambda checked, btn=editbtn: self.forceEdit(btn)) + self.nowValue.append([deviceName, layout, i + 1, editbtn, areaLabel2, areaLineEdit, (i + number) // 2, (i + number) % 2 + 4]) + self.areaLabel.append([deviceName, i + 1, areaLabel, (i + number) // 2, (i + number) % 2 + 3]) + self.number += int(channelNums) + + def forceEdit(self, btn): + for item in self.nowValue: + if btn in item: + item[4].setText(item[5].text()) + + + + def delAreaWidget(self, sub_window): + subwindow = sub_window + if self.areaLabel: + self.deviceName = subwindow.windowTitle() + delAreaWidget = DelAreaWidget(self.areaLabel, self.deviceName) + rowAndColumn = delAreaWidget.getDelAreaRowAndColunm() + self.getAreaWidget(rowAndColumn, subwindow) + else: + return - def getTextValue(self): - for sub_window in self.sub_windows: - areaLayout = sub_window.widget().widget().layout().itemAt(1).widget().layout() + def getAreaWidget(self, rowAndColumn, sub_window): + rowAndColumns = rowAndColumn + subwindow = sub_window + areaLayout = subwindow.widget().widget().layout().itemAt(1).widget().layout() + + for rowAndColumn in rowAndColumns: + print(rowAndColumn) + row = rowAndColumn[0] + column = rowAndColumn[1] + print(row,column) + if column == 0: + for i in range(4): + widget = areaLayout.itemAtPosition(row, i).widget() + print(widget) + areaLayout.removeWidget(widget) + widget.deleteLater() + #删除self.areaLabel列表中的对象 + for label in self.areaLabel: + if widget in label: + self.areaLabel.remove(label) + else: + for i in range(4,8): + widget = areaLayout.itemAtPosition(row, i).widget() + print(widget) + areaLayout.removeWidget(widget) + widget.deleteLater() + # 删除self.areaLabel列表中的对象 + for label in self.areaLabel: + if widget in label: + self.areaLabel.remove(label) - for row in range(areaLayout.rowCount()): - for column in range(areaLayout.columnCount()): - widget_item = areaLayout.itemAtPosition(row, column) - if widget_item is not None: - widget = widget_item.widget() - if isinstance(widget, QLineEdit): - line_edit_text = widget.text() # Get text from QLineEdit - concurrent_label = areaLayout.itemAtPosition(row, column - 1).widget() - proTypeLabel = areaLayout.itemAtPosition(row, column - 2).widget() - # if isinstance(proTypeLabel, QLabel) and (proTypeLabel.text().startswith('AI') or proTypeLabel.text().startswith('DI')): - # concurrent_label.setText(line_edit_text) # Set text to QLabel - self.lineEditText.append([widget, int(widget.text())]) - self.labelText.append([concurrent_label, int(concurrent_label.text())]) - for key in self.lineEditText: - value = key[1] - self.area.masterValues.append(value) @@ -252,9 +287,9 @@ class AreaQMdiSubWindow(QMdiSubWindow): def __init__(self): super().__init__() self.number = 0 - self.devicedb = DeviceDB() def closeEvent(self, event): - self.devicedb.deleteDevice(deviceName = self.windowTitle()) + pass + # self.devicedb.deleteDevice(deviceName = self.windowTitle()) @@ -263,7 +298,7 @@ class AreaQMdiSubWindow(QMdiSubWindow): if __name__ == '__main__': app = QApplication(sys.argv) - Client.initDB() + # Client.initDB() window = MainWindow() window.show() diff --git a/UI/__pycache__/AreaSettingWidget.cpython-310.pyc b/UI/__pycache__/AreaSettingWidget.cpython-310.pyc index 09e93a855e1c067de1dde8b43106f0e2c605576b..34b087ce54dd521e4694185ac07fd44bce7ca6ed 100644 GIT binary patch delta 870 zcmZ8f&1=*^6rYbIJG^59HrKj^^w&CAU1{a)t1_s#g6G0TRL z0%9p6zbPhlvlCY9eaD812|ED+1r!yCP2xRiC$9sFsj>v9!r&sdQ%tAo6yg_{#>k`e zBD4*bS_HPq%*MVZfPj%kh8d0h^%w0hQD41fMEbqk%=g_1cC|cH|8>|rD^fFHLkes} zQ{f@lnWcm#mw>H30}8Mc!@$zREAR(Qf9yaiOxkGhrm#D9cpQJ%b#Ib+Q%=4#T?zl- zfpeyii?o6}TdoAWO?>c!658c)YP=Ez<&raAp5a+}8p8qU8KI+CPzjfns=g~KG}Zny zZxt?8_o(erh>Qsq+;zEIWC7#;iEvsSnD?NF+ggfnRAJYI`C|fVpaGg-6wkpqG>2=5 z>ox4R1+al?fI^CzSk`|S1h}D4aoMS2U4kW9@aT z{=6dJy1ug9TKKZQ@^0g6*m}D9bKyxfGd9xS_u%p}u))?a>Tt-TUN zOXHSM;6y-_cx^a2CgqIWMrv;dhpe*cw zS(rxEBZHi|!z>7d-2FTiMa=DVG~jYFEfT&_dmI_c4GHm&NXf`>9IxQ|zQ+m$$Jy1A zjO4|slfsi__oWn($ua55B)B|}h~pI9e93XFY}linYTtYw_Gf+GC+=es&xH@Q-t#*H kvpqEtxmYaIN`YOHefH(tbOVA2%s_HF1vN;-85T*ZoDZM1V9~40OC$ zS)wI43O?>4r9Zt(N}JEm@bkP`y=B)S+D%1!rbw4 z*SC8o)4DDv@}xX7tG?UGn$P<714#kfPvj!LHf49hhr1~;o_d3JgU}{#bp0YT*;v=w zR2%kVxXn!D=2B)8w(&CVY`mmS+C<8{$f_#WMIq%i*owc>y@|UlbW!<)qXF<>I5NIy zxs>DV?L^9SXdAZGZ-eT*>W<8&{mwS`{(tY^A6x!pT&iiIpMr;ai*>~D5cB&zpuk}b G$e+Ip@^0<` diff --git a/UI/__pycache__/DeviceWidget.cpython-310.pyc b/UI/__pycache__/DeviceWidget.cpython-310.pyc index 3b0b82053ce48a6f14d0fec4b768b3db0ed073fa..22f8afe4bd401279e671e429022a37208038adca 100644 GIT binary patch delta 892 zcmY*YL1+^}6rI_fo!umDn#5{TwP2xE(qgR&f~Xa>#e-Oo3c|Kp(w(&lO|x-!SKG3o zRjZ+Tkg$lC9uiOyp{C%$i&ne}UOevACQa`iJvg&zV_o>~fBt*_GxPs!HT)$OHdl3(W z47GWo8`pKyOit^Ujk!^+7;V4AN%IT?9jK51RUp9vxC@Cu#N~j>+7W3PsEA-9GcOT^ z1enJKfPgBq_MzgRA29UsJ3Jvo?H1Oj{$Zo~y0H1RTzgn?L+Dm0q@{FiW-^`4*=`D* zyw=J@9?m4^4cqeM95rsv=XAQCW$6J99US5uIvJ?JDciD)?BtX&N25IJLySi)?k3uH ze@bzIcDh^AAm*)Ux4VuyqJHt-0(S(DxaXvUi%*%z0VPld6F3j^LSD?Hyp+cdqA^Ee zhM7V0kOfPE0|*;MS>&@G1D04qM08MDpvQJ%sVta-O(oh@I>?b`0KL#;q$aZnN>Uj# z8Yb|ljoESPYj3N?XEwi7ZFQx(^trbBzP{mBpS=0C^k^Y+XZ(2o?TZtnZ(@LBk1woO zJ~bq@m+RHFS4?R08EzL|Y`uHF!>q2OpHSQ)J{k$Jkn-o#IB1vq4evYkZ{2O2@prDUNMdI4-$DUls34^` x5}-Vv2)an_yW(Hd6U}*(_Oh%`?KyMv{dmgxS%cUaeF*Y~yu%To2nuY6e*vna-Vgu) delta 393 zcmdlh^puY;pO=@50SI0Nd`OYvn8+u?XfaV+R-KU{g&~D0hb@ZDogsxeg{6fdg(a1- znK_C*g(;Xpll3J?k0$HHYC9&s5z0W~7H@ofa!z7#adK)-PJBF)O?)6FVC&d{ zELI>c2ARUaz{kkJBA`|T64m6Ge1SvD{1$U@WieO)Nk7;PApN&EY;yBcN^?@}7(s@x M0SOrf4ki&M00c`=CIA2c diff --git a/model/ProjectModel/AreaManage.py b/model/ProjectModel/AreaManage.py index 18264a5..f655f57 100644 --- a/model/ProjectModel/AreaManage.py +++ b/model/ProjectModel/AreaManage.py @@ -8,7 +8,7 @@ from PyQt5.QtWidgets import QApplication, QMainWindow, QToolBar, QMdiArea, QActi from model.ProjectModel.DeviceManage import DevicesManange from protocol.ModBus.TCPMaster import TcpMaster -from utils.DBModels.ClientModels import DeviceDB +# from utils.DBModels.ClientModels import DeviceDB jsonCon = json.dumps([{ "id": 0, diff --git a/model/ProjectModel/__pycache__/AreaManage.cpython-310.pyc b/model/ProjectModel/__pycache__/AreaManage.cpython-310.pyc index a0d011fb2431f2ab4ca22df636868828ee698cc1..63a9577c800e984a414eb22d01506951dd23ec96 100644 GIT binary patch delta 864 zcmZva&1(}u6u@_OH@llnHWd|YTH2(6R@bz|sx@kBs%=8Bh+s<>Dlj ztO@eISB$DmdO1lYnxGohsqsRkNovv*Xdt)bSEP}vOEgWbXA-rZ%8fi|89D;m2xwE3 zY)JN@euk7t|EgRf*+we#oNac~@wzPBB|;6E_h47z#ePp2C!`SVsY|63P(|a&Bkp$C zhU>RHw$55^*kPO>2M@Oq#eK|1qlxF0Db(i>rG3v(4BDmvC zXADn%VEpH9KbZ5^PN91qaT;+BaRzY~5np-@r8UG2#5&^d^~cgI+7_bCRL)oc(Jt`i z=t=5hlV3qce17;sI6D8gRv1g|fOb7rArKMbBQ+#LHpo3Wt)z*n$Ye0oAF}>O(!OUh Ghl5{sNV^sQ delta 900 zcmZvaJ!}&(6oAi{yTrL%N`XqHEhPO@=+U33rRBGQl13nbK&aWWz$v!Eq05ha7urr8 zKtf_G78?>UF(6pFATf7l_t2f06$#$+Nu^ZSy3g;&&+k3^K8_rW`;)Eg z=FgFX-C6mN8O#m~?P8-y3~sz12R+R)jI!)oi#aUET+l#nnIA}F;*P=cY~Y2#2A-RZ zNzhKPLC^+4n_{GHcqjKvQYNlP6s_@RL6g_2dy8h75GDQ8Fqz-mPK^;VCEr-9WeJ5zX20r2BD3{k`YBCg|-6Qi)GY>UU$ z?FW9FYqPSRM%|9G!>-RFaTRyitl#cI(teNmF<18H6E3)@pew_-c(WgKkBT|a#W-RD zq5G>~W^oOHnRSAr7a^DFx209|V2qd66^WaNTh~y!1yHG=6MJ@&q#`G>XL3i{m9^~W zA#A3Rfo2~0VWK5ZD%7 c08oRPlsq=wluKMdVKh+byF8}}l