diff --git a/Static/Area.qss b/Static/Area.qss index d9d5961..c59896c 100644 --- a/Static/Area.qss +++ b/Static/Area.qss @@ -151,6 +151,11 @@ QLabel#areaMessLabel, QLabel#areaValueLabel{ } +QLabel#massesageLabel{ + + font-size: 23px; +} + QLabel#areaValueLabel{ color: #0160aa; diff --git a/Static/Main.qss b/Static/Main.qss index fdb14a4..4e22a06 100644 --- a/Static/Main.qss +++ b/Static/Main.qss @@ -99,7 +99,7 @@ QDockWidget::title{ } -QPushButton#startProtocolBtn, QPushButton#switchBtn{ +QPushButton#startProtocolBtn, QPushButton#switchBtn, QPushButton#switchTouchBtn{ font-size: 20px; @@ -109,7 +109,7 @@ QPushButton#startProtocolBtn, QPushButton#switchBtn{ } -QPushButton#startProtocolBtn:hover, QPushButton#switchBtn:hover{ +QPushButton#startProtocolBtn:hover, QPushButton#switchBtn:hover, QPushButton#switchTouchBtn::hover{ font-size: 20px; @@ -123,7 +123,7 @@ QPushButton#startProtocolBtn:hover, QPushButton#switchBtn:hover{ } -QPushButton#startProtocolBtn:checked, QPushButton#switchBtn:checked{ +QPushButton#startProtocolBtn:checked, QPushButton#switchBtn:checked, QPushButton#switchTouchBtn:checked{ font-size: 20px; @@ -185,3 +185,41 @@ QProgressBar::chunk { width: 20px; } + + +QRadioButton#valueRadio{ + + color: black; + + font-size: 25px; + + font-family: ".SFNSDisplay-Regular"; + + font: bold; + +} + + +QRadioButton#valueRadio::indicator:enabled:checked{ + + image: url(Static/radioOn.png); + +} + +QRadioButton#valueRadio::indicator:enabled:unchecked{ + + image: url(Static/radioOff.png); + +} + +QRadioButton#valueRadio::indicator:disabled:unchecked{ + + image: url(Static/radioDisableOff.png); + +} + +QRadioButton#valueRadio::indicator:disabled:checked{ + + image: url(Static/radioDisableOn.png); + +} \ No newline at end of file diff --git a/Static/radioDisableOff.png b/Static/radioDisableOff.png new file mode 100644 index 0000000..54ea5f6 Binary files /dev/null and b/Static/radioDisableOff.png differ diff --git a/Static/radioDisableOn.png b/Static/radioDisableOn.png new file mode 100644 index 0000000..1a878fd Binary files /dev/null and b/Static/radioDisableOn.png differ diff --git a/Static/radioOff.png b/Static/radioOff.png new file mode 100644 index 0000000..63a5c8b Binary files /dev/null and b/Static/radioOff.png differ diff --git a/Static/radioOn.png b/Static/radioOn.png new file mode 100644 index 0000000..5d00b79 Binary files /dev/null and b/Static/radioOn.png differ diff --git a/UI/AreaTabWidget.py b/UI/AreaTabWidget.py index a513aa8..96a9dd7 100644 --- a/UI/AreaTabWidget.py +++ b/UI/AreaTabWidget.py @@ -16,6 +16,8 @@ from model.ProjectModel.DeviceManage import Device, DevicesManange from UI.RightAreaWidget import RightAreaWidgets from utils.DBModels.DeviceModels import DeviceDB +from UI.SoftKeyBoardEdit import SoftKeyBoardEdit + class AreaTabWidget(QTabWidget): @@ -181,12 +183,12 @@ class AreaWidget(QWidget): self.byteLineLabel = QLabel('字节长度:') self.byteLineLabel.setObjectName('byteLineLabel') # self.byteLineLabel.setFixedSize(90, 27) - self.byteLineEdit = QLineEdit() + self.byteLineEdit = SoftKeyBoardEdit() self.byteLineEdit.setPlaceholderText('字节长度') self.byteLineEdit.setObjectName('byteLineEdit') # self.byteLineEdit.setFixedSize(90, 27) - self.okBtn = QPushButton('确定') + self.okBtn = QPushButton('保存') # self.okBtn.setFixedSize(90, 27) self.okBtn.setObjectName('okBtn') self.okBtn.setIcon(qtawesome.icon('fa.pencil', color='#4c8cf2')) @@ -262,7 +264,7 @@ class AreaWidget(QWidget): # 只点击了新建区域按钮,未点击确定按钮时,直接点击删除按钮的删除情况 index = self.areaTabWidget.currentIndex() tabCount = self.areaTabWidget.count() - if self.okBtn.text() == '确定': + if self.okBtn.text() == '保存': if index != -1: self.areaTabWidget.removeTab(index) diff --git a/UI/DeviceDialogWidget.py b/UI/DeviceDialogWidget.py index 299cb11..5f599fa 100644 --- a/UI/DeviceDialogWidget.py +++ b/UI/DeviceDialogWidget.py @@ -57,18 +57,26 @@ class DeviceDialog(QDialog): def checkInput(self): titleName, pvUpperLimit, pvLowerLimit, pvUnit = self.getParameters() deviceName = titleName + self.dataTypeAndModel - if not pvUpperLimit or not pvLowerLimit or not pvUnit or not deviceName: - QMessageBox.warning(self, '警告', '有值未输入。') + if not pvUpperLimit and not pvLowerLimit and not pvUnit: + pass + else: + if not pvUpperLimit or not pvLowerLimit or not pvUnit: + QMessageBox.warning(self, '警告', '有值未输入。') + return + if not re.match(r'^[-+]?\d*\.?\d*$', pvUpperLimit) or not re.match(r'^[-+]?\d*\.?\d*$', pvLowerLimit): + QMessageBox.warning(self, '警告', '请输入数字。') + return + if float(pvUpperLimit) <= float(pvLowerLimit): + QMessageBox.warning(self, '警告', '量程输入有误。') + return + + if not deviceName: + QMessageBox.warning(self, '警告', '请输入设备名。') return + elif DeviceDB.getByName(deviceName): # print(DeviceDB.getByName(deviceName),2343) QMessageBox.warning(self, '警告', '设备名重复') return - elif not re.match(r'^[-+]?\d*\.?\d*$', pvUpperLimit) or not re.match(r'^[-+]?\d*\.?\d*$', pvLowerLimit): - QMessageBox.warning(self, '警告', '请输入数字。') - return - elif float(pvUpperLimit) <= float(pvLowerLimit): - QMessageBox.warning(self, '警告', '量程输入有误。') - return else: self.accept() # 所有输入都是数字且不为空时接受对话框 \ No newline at end of file diff --git a/UI/MainWindow.py b/UI/MainWindow.py index 403e052..707d4be 100644 --- a/UI/MainWindow.py +++ b/UI/MainWindow.py @@ -22,6 +22,9 @@ import sys from PyQt5.QtWidgets import QApplication, QMainWindow, QProgressBar, QVBoxLayout, QWidget from PyQt5.QtCore import Qt, QRect, QSize from PyQt5.QtGui import QPainter, QFont, QColor + +from utils import Globals + class CustomProgressBar(QProgressBar): def __init__(self, parent=None): @@ -40,6 +43,7 @@ class CustomProgressBar(QProgressBar): + def getHwndByPid(pid): def callback(hwnd, hwnds): if hwnd is not None and win32gui.IsWindowVisible(hwnd): @@ -112,8 +116,16 @@ class MainWindow(QWidget): self.batteryStateLabel = QLabel() self.batteryStateLabel.setObjectName('batteryLabel') + self.switchTouchBtn = QPushButton("触控模式") + self.switchTouchBtn.setIconSize(QSize(20, 20)) + self.switchTouchBtn.setObjectName('switchTouchBtn') + self.switchTouchBtn.setIcon(qtawesome.icon('fa.keyboard-o', color='#1fbb6f')) + self.switchTouchBtn.clicked.connect(self.switchTouchMode) + self.switchTouchBtn.setCheckable(True) + toolbarLayout.addWidget(self.startProtocolBtn, 1) toolbarLayout.addWidget(self.switchBtn, 1) + toolbarLayout.addWidget(self.switchTouchBtn, 1) toolbarLayout.addWidget(QWidget(), 20) # toolbarLayout.addWidget(QLabel('电量:'), 1) toolbarLayout.addWidget(self.batteryProBar, 1) @@ -159,13 +171,15 @@ class MainWindow(QWidget): self.setWindowTitle("PROFIBUS") self.refreshProgressBar() + + self.devicesManange.connect() # self.resize(800, 600) # self.showMaximized() def startProtocol(self): if self.startProtocolBtn.isChecked(): - self.devicesManange.connect() + self.startProtocolBtn.setText('停止通讯') self.startProtocolBtn.setIcon(QIcon('Static/pause.png')) self.startProtocolBtn.setIconSize(QSize(22, 22)) @@ -235,6 +249,7 @@ class MainWindow(QWidget): self.process = subprocess.Popen("D:\\EnTalk PROFIBUS Manager\\DP.exe",startupinfo=startupInfo) QTimer.singleShot(500, lambda:self.showLowerWidget(self.process)) self.switchBtn.setText('变量读写') + self.showMaximized() # self.switchBtn.setIcon(QIcon('Static/varMagH.png')) else: # self.stackWidget.setCurrentIndex(1) @@ -272,6 +287,17 @@ class MainWindow(QWidget): self.process.kill() self.batteryManange.close() + def switchTouchMode(self): + if self.switchTouchBtn.isChecked(): + Globals.setValue('_touchMode', 1) + self.switchTouchBtn.setText('键盘模式') + else: + Globals.setValue('_touchMode', 0) + self.switchTouchBtn.setText('触控模式') + + + + if __name__ == '__main__': app = QApplication(sys.argv) Client.initDB() diff --git a/UI/RightAreaWidget.py b/UI/RightAreaWidget.py index af8e5ae..0504cc3 100644 --- a/UI/RightAreaWidget.py +++ b/UI/RightAreaWidget.py @@ -1,10 +1,12 @@ import re from PyQt5.QtWidgets import QApplication, QMainWindow, QTabWidget, QWidget, QVBoxLayout, QLabel, QPushButton, QLayout, \ - QHBoxLayout, QComboBox, QLineEdit, QSpacerItem, QSizePolicy, QGridLayout, QMessageBox, QSplitter, QFrame + QHBoxLayout, QComboBox, QLineEdit, QSpacerItem, QSizePolicy, QGridLayout, QMessageBox, QSplitter, QFrame, QRadioButton from PyQt5.QtCore import Qt -class forceButton(QPushButton): +from UI.SoftKeyBoardEdit import SoftKeyBoardEdit + +class ForceButton(QPushButton): def __init__(self, number = None, valueLabel = None, valueEdit = None): super().__init__() self.valueEdit = valueEdit @@ -13,6 +15,11 @@ class forceButton(QPushButton): self.setObjectName('forceBtn') self.setText('强制') +class ForceRadioButton(QRadioButton): + def __init__(self, number = None): + super().__init__() + self.number = number + class RightAreaWidgets(QWidget): def __init__(self, areaWidget, order, byteLineEdit, dataType, deviceName): super().__init__() @@ -24,6 +31,12 @@ class RightAreaWidgets(QWidget): self.byteLineEdit = byteLineEdit self.dataType = dataType self.deviceName = deviceName + if '主站' in self.deviceName and self.dataType == 'AI' or ('从站' in self.deviceName and self.dataType == 'AO'): + self.force = False + elif '主站' in self.deviceName and self.dataType == 'DI' or ('从站' in self.deviceName and self.dataType == 'DO'): + self.force = False + else: + self.force = True self.addLayout() # self.setStyleSheet("background-color: black") @@ -40,7 +53,7 @@ class RightAreaWidgets(QWidget): if self.dataType in ['AI','AO']: hLayout = QHBoxLayout() hLayout.addWidget(QSplitter()) - hLayout.addLayout(self.dateLayout(1)) + hLayout.addLayout(self.dateLayout(0)) hLayout.addWidget(QSplitter()) areaLayout.addWidget(QSplitter()) areaLayout.addLayout(hLayout) @@ -51,58 +64,67 @@ class RightAreaWidgets(QWidget): for i in range(int(byteLineEdit)): hLayout = QHBoxLayout() hLayout.addWidget(QSplitter(), 1) - hLayout.addLayout(self.dateLayout(number = (i + 1)), 3) + hLayout.addLayout(self.dateLayout(number = (i), isAnalog = False), 3) hLayout.addWidget(QSplitter(), 1) - hLayout.addLayout(self.dateLayout(number = (i + 1) + 8), 3) + hLayout.addLayout(self.dateLayout(number = (i) + 8, isAnalog = False), 3) hLayout.addWidget(QSplitter(), 1) areaLayout.addLayout(hLayout) areaLayout.addWidget(QSplitter()) return areaLayout - def dateLayout(self, number, force = True): - number = number - - forceLayout = QHBoxLayout() - forceLayout.setContentsMargins(0, 0, 0, 0) - areaMessLabel = QLabel(str(self.dataType) + "{:<{}}".format(str(number), 2) + ": " + '字节长度: ' + str(self.byteLineEdit) + ' 当前值:' ) - areaMessLabel.setObjectName('areaMessLabel') - areaValueLabel = QLabel('0') - areaValueLabel.setObjectName('areaValueLabel') - forceLayout.addWidget(areaMessLabel) - forceLayout.addWidget(areaValueLabel) + def dateLayout(self, number, isAnalog = True): + if not isAnalog: + forceLayout = QHBoxLayout() + valueRadio = ForceRadioButton(number = number) + valueRadio.setObjectName('valueRadio') + valueRadio.setAutoExclusive(False) + valueRadio.setText('OFF') + valueRadio.toggled.connect(self.DIDOForceValues) + massesageLabel = QLabel('通道 {} '.format(str(number + 1))) + massesageLabel.setObjectName('massesageLabel') + forceLayout.addWidget(massesageLabel) + forceLayout.addWidget(valueRadio) + forceLayout.setContentsMargins(0, 0, 0, 0) + forceLayout.setSpacing(0) + self.areaLabel[number] = valueRadio + if not self.force: + valueRadio.setEnabled(False) + else: + forceLayout = QHBoxLayout() + forceLayout.setContentsMargins(0, 0, 0, 0) + areaMessLabel = QLabel('当前值:' ) + areaMessLabel.setObjectName('areaMessLabel') + areaValueLabel = QLabel('0') + areaValueLabel.setObjectName('areaValueLabel') + forceLayout.addWidget(areaMessLabel) + forceLayout.addWidget(areaValueLabel) + if self.force: + areaLineEdit = SoftKeyBoardEdit('0') + areaLineEdit.setObjectName('areaLineEdit') + areaLineEdit.setFixedSize(80, 33) + forceBtn = ForceButton(number = number, valueLabel=areaValueLabel, valueEdit=areaLineEdit) + forceBtn.clicked.connect(self.AIAOForceValues) + # forceBtn.setFixedSize(50, 27) + forceLayout.addWidget(areaLineEdit) + forceLayout.addWidget(forceBtn) + else: + self.areaLabel[number] = areaValueLabel - if '主站' in self.deviceName and self.dataType == 'AI' or ('从站' in self.deviceName and self.dataType == 'AO'): - force = False - self.areaLabel[number - 1] = areaValueLabel - elif '主站' in self.deviceName and self.dataType == 'DI' or ('从站' in self.deviceName and self.dataType == 'DO'): - force = False - self.areaLabel[number - 1] = areaValueLabel - - - if force: - areaLineEdit = QLineEdit('0') - areaLineEdit.setObjectName('areaLineEdit') - areaLineEdit.setFixedSize(80, 33) - forceBtn = forceButton(number = number, valueLabel=areaValueLabel, valueEdit=areaLineEdit) - forceBtn.clicked.connect(self.forceValues) - # forceBtn.setFixedSize(50, 27) - forceLayout.addWidget(areaLineEdit) - forceLayout.addWidget(forceBtn) - self.areaLineEditValue.append(0) - - if self.deviceName[-2:] + self.dataType in ['从站DI','主站DO']: - areaMessLabel.setObjectName('wirteDIDOareaMessLabel') - areaValueLabel.setObjectName('wirteDIDOareaValueLabel') - areaLineEdit.setObjectName('wirteDIDOareaLineEdit') - areaLineEdit.setFixedSize(30, 27) - areaLineEdit.setAlignment(Qt.AlignHCenter) - forceBtn.setObjectName('wirteDIDOforceBtn') + self.areaLineEditValue.append(0) - if self.deviceName[-2:] + self.dataType in ['主站DI','从站DO']: - areaMessLabel.setObjectName('readDIDOareaMessLabel') - areaValueLabel.setObjectName('readDIDOareaValueLabel') + # if self.deviceName[-2:] + self.dataType in ['从站DI','主站DO']: + # areaMessLabel.setObjectName('wirteDIDOareaMessLabel') + # areaValueLabel.setObjectName('wirteDIDOareaValueLabel') + # areaLineEdit.setObjectName('wirteDIDOareaLineEdit') + # areaLineEdit.setFixedSize(30, 27) + # areaLineEdit.setAlignment(Qt.AlignHCenter) + # forceBtn.setObjectName('wirteDIDOforceBtn') + + # if self.deviceName[-2:] + self.dataType in ['主站DI','从站DO']: + # areaMessLabel.setObjectName('readDIDOareaMessLabel') + # areaValueLabel.setObjectName('readDIDOareaValueLabel') @@ -111,7 +133,10 @@ class RightAreaWidgets(QWidget): # forceLayout.setSpacing(10) return forceLayout - def wirteAreaLineEditValue(self,dataTypeAndModel, valueLabel, number, value): + def wirteAreaLineEditValue(self,dataTypeAndModel, number, value, valueLabel = None): + if self.areaWidget.okBtnValue: + QMessageBox.warning(self, '提示', '请先保存通道信息') + return if dataTypeAndModel in ['主站AO','从站AI']: pattern = re.compile(r'-?\d*\.?\d+') @@ -120,43 +145,49 @@ class RightAreaWidgets(QWidget): QMessageBox.warning(self, '提示', '请输入数字。') return else: - valueLabel.setText(value) - self.areaLineEditValue[number -1] = float(value) + valueLabel.setText(str(float(value))) + self.areaLineEditValue[number] = float(value) #判断输入值是否为0和1 elif dataTypeAndModel in ['主站DO','从站DI']: - pattern = re.compile(r'^[01]$') - match = pattern.match(value) - if not match: - QMessageBox.warning(self, '提示', '请输入0或1。') - return - else: - valueLabel.setText(value) - self.areaLineEditValue[number -1] = value + # pattern = re.compile(r'^[01]$') + # match = pattern.match(value) + # if not match: + # QMessageBox.warning(self, '提示', '请输入0或1。') + # return + # else: + # valueLabel.setText(value) + self.areaLineEditValue[number] = value return self.areaLineEditValue def readValues(self, curIndex): # print(curIndex) - if self.areaLabel is None or self.areaLabel == dict(): - return - # elif curIndex == -1: - # return - else: + if not self.force: device = self.devicesManange.getDevice(self.deviceName) values = device.getAreaValues(curIndex) # print(self.deviceName, curIndex, values) if len(values) > len(self.areaLabel): return for index, value in enumerate(values): + # print(self.dataType, self.force) + if self.dataType in ['DI', 'DO'] and not self.force: + if value == 1: + value = 'ON' + self.areaLabel[index].setChecked(True) + else: + value = 'OFF' + self.areaLabel[index].setChecked(False) + self.areaLabel[index].setText(value) + continue self.areaLabel[index].setText(str(value)) # print(self.areaLabel[index],values) - def forceValues(self): + def AIAOForceValues(self): sender = self.sender() number = sender.number valueLabel = sender.valueLabel @@ -170,4 +201,19 @@ class RightAreaWidgets(QWidget): else: self.devicesManange.writeAreas(deviceName = self.deviceName, areaIndex = curIndex, values = valueList) - \ No newline at end of file + + def DIDOForceValues(self): + sender = self.sender() + number = sender.number + value = 1 if sender.isChecked() else 0 + dataTypeAndModel = self.deviceName[-2:] + self.dataType + curIndex = self.areaWidget.areaTabWidget.currentIndex() + valueList = self.wirteAreaLineEditValue(dataTypeAndModel=dataTypeAndModel, number=number, value=value) + if valueList is None: + return + else: + self.devicesManange.writeAreas(deviceName = self.deviceName, areaIndex = curIndex, values = valueList) + if sender.isChecked(): + sender.setText('ON') + else: + sender.setText('OFF') \ No newline at end of file diff --git a/UI/SoftKeyBoardEdit.py b/UI/SoftKeyBoardEdit.py new file mode 100644 index 0000000..e8b50c8 --- /dev/null +++ b/UI/SoftKeyBoardEdit.py @@ -0,0 +1,51 @@ +import win32gui + +from ctypes import HRESULT + +from ctypes.wintypes import HWND + +from comtypes import IUnknown, GUID, COMMETHOD + +import comtypes.client + +import os +import sys + +from PyQt5.QtWidgets import QLineEdit + +from utils import Globals + +class ITipInvocation(IUnknown): + + _iid_ = GUID("{37c994e7-432b-4834-a2f7-dce1f13b834b}") + + _methods_ = [COMMETHOD([], HRESULT, "Toggle", (['in'], HWND, "hwndDesktop"))] + + +class SoftKeyBoardEdit(QLineEdit): + def __init__(self, *args): + super().__init__(*args) + + # self.mousePressEvent = self.popupKeyboard + + def toggleTabtip(self): + try: + + comtypes.CoInitialize() + + ctsdk = comtypes.client.CreateObject("{4ce576fa-83dc-4F88-951c-9d0782b4e376}", interface=ITipInvocation) + + ctsdk.Toggle(win32gui.GetDesktopWindow()) + + comtypes.CoUninitialize() + + except OSError as e: + + os.system("C:\\PROGRA~1\\COMMON~1\\MICROS~1\\ink\\tabtip.exe") + + + def mousePressEvent(self, event): + print(Globals.getValue('_touchMode')) + if Globals.getValue('_touchMode'): + self.toggleTabtip() + event.accept() \ No newline at end of file diff --git a/bin.py b/bin.py index 2821dbd..4c044ab 100644 --- a/bin.py +++ b/bin.py @@ -2,6 +2,8 @@ from PyQt5.QtWidgets import QApplication, QStyleFactory from UI.MainWindow import MainWindow, CommonHelper from model.ClientModel.Client import Client +from utils import Globals + import time import sys @@ -10,9 +12,10 @@ if __name__ == '__main__': app = QApplication(sys.argv) app.setStyle(QStyleFactory.create('windowsvisio')) app.setStyleSheet(CommonHelper.readQss('static/main.qss') + CommonHelper.readQss('static/Area.qss')) - + Globals._init() Client.initDB() window = MainWindow() window.showMaximized() + Globals.setValue('MainWindow', window) # window.show() sys.exit(app.exec_()) \ No newline at end of file diff --git a/model/ProjectModel/DeviceManage.py b/model/ProjectModel/DeviceManage.py index b3ac3e4..ef18982 100644 --- a/model/ProjectModel/DeviceManage.py +++ b/model/ProjectModel/DeviceManage.py @@ -39,7 +39,7 @@ class Device(): # print(area.startAddress, area.endAddress) self.inputEndAddress = area.endAddress area.addressList = np.arange(area.startAddress, area.endAddress + 1, area.bytes).tolist() - self.indexDict[len(self.indexDict.values())] = len(self.inputAreas) + self.indexDict[len(self.indexDict.values())] = [0, len(self.inputAreas)] self.inputAreas.append(area) self.areas.append(area) elif type in ["DO" , "AO"]: @@ -47,7 +47,7 @@ class Device(): area.endAddress = area.startAddress + area.length self.outputEndAddress = area.endAddress area.addressList = np.arange(area.startAddress, area.endAddress + 1, area.bytes).tolist() - self.indexDict[len(self.indexDict.values())] = len(self.outputAreas) + self.indexDict[len(self.indexDict.values())] = [1, len(self.outputAreas)] self.outputAreas.append(area) self.areas.append(area) if (self.masterOrSlave == '主站' and type in ['AI', 'DI']) or (self.masterOrSlave == '从站' and type in ['AO', 'DO']): @@ -57,10 +57,23 @@ class Device(): def delArea(self, index, type): if type in ["DI", "AI"]: - self.inputAreas.pop(self.indexDict[index]) + self.inputAreas.pop(self.indexDict[index][1]) elif type in ["AO", "DO"]: - self.outputAreas.pop(self.indexDict[index]) - self.indexDict.pop(index) + self.outputAreas.pop(self.indexDict[index][1]) + # self.indexDict.pop(index) + newDict = collections.OrderedDict() + rmValue = self.indexDict[index] + for key, value in self.indexDict.items(): + # print(value) + if key < index: + newDict[key] = value + elif key > index: + if value[0] == rmValue[0]: + newDict[key - 1] = [value[0], value[1] - 1] # 更新类型索引和区域索引 + else: + newDict[key - 1] = [value[0], value[1]] + + self.indexDict = newDict self.areas.pop(index) self.recalculateAddress() diff --git a/utils/DBModels/DeviceModels.py b/utils/DBModels/DeviceModels.py index 90f14a4..a3bcb17 100644 --- a/utils/DBModels/DeviceModels.py +++ b/utils/DBModels/DeviceModels.py @@ -50,7 +50,7 @@ class DeviceDB(BaseModel): # 添加设备 - def addDevice(self, deviceName, proType, masterSlaveModel=masterSlaveModel, areaJson=json.dumps([]), pvUpperLimit=pvUpperLimit, pvLowerLimit=pvLowerLimit, pvUnit=pvUnit): + def addDevice(self, deviceName, proType, masterSlaveModel=masterSlaveModel, areaJson=json.dumps([]), pvUpperLimit=None, pvLowerLimit=None, pvUnit=None): self.deviceName = deviceName self.proType = proType self.masterSlaveModel = masterSlaveModel diff --git a/utils/Globals.py b/utils/Globals.py new file mode 100644 index 0000000..f4f33b7 --- /dev/null +++ b/utils/Globals.py @@ -0,0 +1,18 @@ +def _init():#初始化 + global _globalDict + _globalDict = {} + _globalDict['_touchMode'] = 0 # 触控模式 + _globalDict['MainWindow'] = None +def setValue(key,value): + """ 定义一个全局变量 """ + _globalDict[key] = value + +def getValue(key,defValue=None): + """ 获得一个全局变量,不存在则返回默认值 """ + try: + return _globalDict[key] + except KeyError: + print('没有这个变量') + return False +def clearValue(key): + _globalDict[key].clear() \ No newline at end of file