0305更新
parent
7090bbbcf9
commit
f52e4e0f4e
@ -0,0 +1,86 @@
|
|||||||
|
import collections
|
||||||
|
|
||||||
|
class AreaValueManage():
|
||||||
|
def __init__(self):
|
||||||
|
self.wirteAllValueDict = collections.OrderedDict()
|
||||||
|
self.readAllValueDict = collections.OrderedDict()
|
||||||
|
self.wirteValueDict = collections.OrderedDict()
|
||||||
|
self.readValueDict = collections.OrderedDict()
|
||||||
|
self.initCurindex = 0
|
||||||
|
self.readValueWidgets = []
|
||||||
|
|
||||||
|
def initAreaValue(self, deviceName, curIndex, valueList, dataTypeAndModel):
|
||||||
|
if dataTypeAndModel in ['主站AO','从站AI', '主站DO','从站DI']:
|
||||||
|
self.wirteValueDict[self.initCurindex] = valueList
|
||||||
|
self.wirteAllValueDict[deviceName] = self.wirteValueDict
|
||||||
|
self.initCurindex += 1
|
||||||
|
else:
|
||||||
|
self.readValueDict[self.initCurindex] = valueList
|
||||||
|
self.readAllValueDict[deviceName] = self.readValueDict
|
||||||
|
self.initCurindex += 1
|
||||||
|
print(self.readAllValueDict,999)
|
||||||
|
|
||||||
|
|
||||||
|
def delArea(self, deviceName, curIndex):
|
||||||
|
if deviceName in self.wirteAllValueDict.keys():
|
||||||
|
areaDict = self.wirteAllValueDict[deviceName]
|
||||||
|
if curIndex in self.wirteAllValueDict[deviceName].keys():
|
||||||
|
areaDict.pop(curIndex)
|
||||||
|
|
||||||
|
for key, value in areaDict.items():
|
||||||
|
if key > curIndex:
|
||||||
|
areaDict[key - 1] = value
|
||||||
|
areaDict.pop(key)
|
||||||
|
elif deviceName in self.readAllValueDict.keys():
|
||||||
|
areaDict = self.readAllValueDict[deviceName]
|
||||||
|
if curIndex in self.readAllValueDict[deviceName].keys():
|
||||||
|
areaDict.pop(curIndex)
|
||||||
|
|
||||||
|
for key, value in areaDict.items():
|
||||||
|
if key > curIndex:
|
||||||
|
areaDict[key - 1] = value
|
||||||
|
areaDict.pop(key)
|
||||||
|
|
||||||
|
|
||||||
|
def delDevice(self,deviceName):
|
||||||
|
if deviceName in self.wirteAllValueDict.keys():
|
||||||
|
self.wirteAllValueDict.pop(deviceName)
|
||||||
|
elif deviceName in self.readAllValueDict.keys():
|
||||||
|
self.readAllValueDict.pop(deviceName)
|
||||||
|
|
||||||
|
def updataAreaValue(self, deviceName, curIndex, valueList, dataTypeAndModel):
|
||||||
|
if dataTypeAndModel in ['主站AO','从站AI', '主站DO','从站DI']:
|
||||||
|
if deviceName not in self.wirteAllValueDict.keys():
|
||||||
|
self.wirteValueDict[self.initCurindex] = valueList
|
||||||
|
self.wirteAllValueDict[deviceName] = self.wirteValueDict
|
||||||
|
else:
|
||||||
|
areaDict = self.wirteAllValueDict[deviceName]
|
||||||
|
areaDict[curIndex] = valueList
|
||||||
|
else:
|
||||||
|
if deviceName not in self.readAllValueDict.keys():
|
||||||
|
self.readValueDict[self.initCurindex] = valueList
|
||||||
|
self.readAllValueDict[deviceName] = self.readValueDict
|
||||||
|
else:
|
||||||
|
areaDict = self.readAllValueDict[deviceName]
|
||||||
|
areaDict[curIndex] = valueList
|
||||||
|
|
||||||
|
def getAreaValueList(self, deviceName, dataTypeAndModel):
|
||||||
|
writeValueLists = []
|
||||||
|
readWidgetList = []
|
||||||
|
if dataTypeAndModel in ['主站AO','从站AI', '主站DO','从站DI']:
|
||||||
|
if deviceName in self.wirteAllValueDict.keys():
|
||||||
|
writeValueDict = self.wirteAllValueDict[deviceName]
|
||||||
|
if writeValueDict:
|
||||||
|
for valueList in writeValueDict.values():
|
||||||
|
for value in valueList:
|
||||||
|
writeValueLists.append(value)
|
||||||
|
return writeValueLists
|
||||||
|
|
||||||
|
elif deviceName in self.readAllValueDict.keys():
|
||||||
|
readValueDict = self.readAllValueDict[deviceName]
|
||||||
|
if readValueDict:
|
||||||
|
for widgetsList in writeValueDict.values():
|
||||||
|
for widget in widgetsList:
|
||||||
|
readWidgetList.append(widget)
|
||||||
|
return readWidgetList
|
||||||
|
|
@ -0,0 +1,141 @@
|
|||||||
|
from PyQt5.QtWidgets import QApplication, QMainWindow, QTabWidget, QWidget, QVBoxLayout, QLabel, QPushButton, QLayout, \
|
||||||
|
QHBoxLayout, QComboBox, QLineEdit, QSpacerItem, QSizePolicy, QGridLayout, QMessageBox, QSplitter, QFrame
|
||||||
|
import re
|
||||||
|
class forceButton(QPushButton):
|
||||||
|
def __init__(self, valueLabel = None, valueEdit = None):
|
||||||
|
super().__init__()
|
||||||
|
|
||||||
|
self.valueEdit = valueEdit
|
||||||
|
self.valueLabel= valueLabel
|
||||||
|
self.setObjectName('forceBtn')
|
||||||
|
self.setText('强制')
|
||||||
|
|
||||||
|
class ButtonLayout(QWidget):
|
||||||
|
def __init__(self, areaWidget, order, byteLineEdit, dataType, deviceName):
|
||||||
|
super().__init__()
|
||||||
|
self.areaLineEditWidgets = []
|
||||||
|
self.areaLabelWidget = []
|
||||||
|
self.areaWidget = areaWidget
|
||||||
|
self.order = order
|
||||||
|
self.byteLineEdit = byteLineEdit
|
||||||
|
self.dataType = dataType
|
||||||
|
self.deviceName = deviceName
|
||||||
|
self.areaValueManage = self.areaWidget.areaValueManage
|
||||||
|
self.settingValue = areaWidget.settingValue
|
||||||
|
self.addLayout()
|
||||||
|
self.initValues()
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
def addLayout(self):
|
||||||
|
self.setLayout(self.areaLayout())
|
||||||
|
|
||||||
|
|
||||||
|
def areaLayout(self):
|
||||||
|
areaLayout = QVBoxLayout()
|
||||||
|
print(self.dataType)
|
||||||
|
if self.dataType in ['AI','AO']:
|
||||||
|
hLayout = QHBoxLayout()
|
||||||
|
hLayout.addLayout(self.dateLayout(1))
|
||||||
|
hLayout.addWidget(QSplitter())
|
||||||
|
areaLayout.addLayout(hLayout)
|
||||||
|
areaLayout.addWidget(QSplitter())
|
||||||
|
else:
|
||||||
|
byteLineEdit = int(self.byteLineEdit) * 4
|
||||||
|
for i in range(int(byteLineEdit)):
|
||||||
|
hLayout = QHBoxLayout()
|
||||||
|
hLayout.addLayout(self.dateLayout(number = (i + 1)*2 - 1))
|
||||||
|
# hLayout.addWidget(QSplitter())
|
||||||
|
hLayout.addLayout(self.dateLayout(number = (i + 1)*2))
|
||||||
|
areaLayout.addLayout(hLayout)
|
||||||
|
areaLayout.addWidget(QSplitter())
|
||||||
|
return areaLayout
|
||||||
|
|
||||||
|
def dateLayout(self, number, force = True):
|
||||||
|
number = number
|
||||||
|
|
||||||
|
forceLayout = QHBoxLayout()
|
||||||
|
areaMessLabel = QLabel(str(self.dataType) + str(number) + ": " + '字节长度: ' + str(self.byteLineEdit) + ' 当前值: ' )
|
||||||
|
areaMessLabel.setObjectName('areaMessLabel')
|
||||||
|
areaValueLabel = QLabel('0')
|
||||||
|
areaValueLabel.setObjectName('areaValueLabel')
|
||||||
|
forceLayout.addWidget(areaMessLabel)
|
||||||
|
forceLayout.addWidget(areaValueLabel)
|
||||||
|
|
||||||
|
|
||||||
|
if '主站' in self.deviceName and self.dataType == 'AI' or ('从站' in self.deviceName and self.dataType == 'AO'):
|
||||||
|
force = False
|
||||||
|
self.areaLabelWidget.append(areaValueLabel)
|
||||||
|
elif '主站' in self.deviceName and self.dataType == 'DI' or ('从站' in self.deviceName and self.dataType == 'DO'):
|
||||||
|
force = False
|
||||||
|
self.areaLabelWidget.append(areaValueLabel)
|
||||||
|
|
||||||
|
if force:
|
||||||
|
areaLineEdit = QLineEdit('0')
|
||||||
|
areaLineEdit.setObjectName('areaLineEdit')
|
||||||
|
forceBtn = forceButton(valueLabel=areaValueLabel, valueEdit=areaLineEdit)
|
||||||
|
forceBtn.clicked.connect(self.forceValues)
|
||||||
|
forceLayout.addWidget(areaLineEdit)
|
||||||
|
forceLayout.addWidget(forceBtn)
|
||||||
|
self.areaLineEditWidgets.append(forceBtn)
|
||||||
|
return forceLayout
|
||||||
|
|
||||||
|
def wirteAreaLineEditValue(self,dataTypeAndModel):
|
||||||
|
areaValueList = []
|
||||||
|
if dataTypeAndModel in ['主站AO','从站AI']:
|
||||||
|
for areaLineEdit in self.areaLineEditWidgets:
|
||||||
|
editValue = areaLineEdit.valueEdit.text()
|
||||||
|
pattern = re.compile(r'^\d+(\.\d+)?$')
|
||||||
|
match = pattern.match(editValue)
|
||||||
|
if not match:
|
||||||
|
QMessageBox.warning(self, '提示', '请输入数字。')
|
||||||
|
return
|
||||||
|
else:
|
||||||
|
areaLineEdit.valueLabel.setText(editValue)
|
||||||
|
areaValueList.append(editValue)
|
||||||
|
return areaValueList
|
||||||
|
#判断输入值是否为0和1
|
||||||
|
elif dataTypeAndModel in ['主站DO','从站DI']:
|
||||||
|
for areaLineEdit in self.areaLineEditWidgets:
|
||||||
|
editValue = areaLineEdit.valueEdit.text()
|
||||||
|
pattern = re.compile(r'^[01]$')
|
||||||
|
match = pattern.match(editValue)
|
||||||
|
if not match:
|
||||||
|
QMessageBox.warning(self, '提示', '请输入0或1。')
|
||||||
|
return
|
||||||
|
else:
|
||||||
|
areaLineEdit.valueLabel.setText(editValue)
|
||||||
|
areaValueList.append(editValue)
|
||||||
|
else:
|
||||||
|
areaValueList = self.areaLabelWidget
|
||||||
|
|
||||||
|
return areaValueList
|
||||||
|
|
||||||
|
def readValues(self,valueList):
|
||||||
|
widgets = self.areaLabelWidget
|
||||||
|
for value, widgets in zip(valueList, widgets):
|
||||||
|
widgets.setText(str(value))
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
def forceValues(self):
|
||||||
|
|
||||||
|
dataTypeAndModel = self.deviceName[-2:] + self.dataType
|
||||||
|
curIndex = self.areaWidget.areaTabWidget.currentIndex()
|
||||||
|
valueList = self.wirteAreaLineEditValue(dataTypeAndModel)
|
||||||
|
|
||||||
|
# if valueList is None:
|
||||||
|
# return
|
||||||
|
# else:
|
||||||
|
self.areaValueManage.updataAreaValue(deviceName = self.deviceName, curIndex = curIndex, valueList = valueList, dataTypeAndModel = dataTypeAndModel)
|
||||||
|
self.areaWidget.wirteValue(deviceName = self.deviceName, dataTypeAndModel = dataTypeAndModel)
|
||||||
|
def initValues(self):
|
||||||
|
|
||||||
|
dataTypeAndModel = self.deviceName[-2:] + self.dataType
|
||||||
|
valueList = self.wirteAreaLineEditValue(dataTypeAndModel)
|
||||||
|
|
||||||
|
curIndex = self.areaWidget.areaTabWidget.currentIndex()
|
||||||
|
if self.settingValue is not None:
|
||||||
|
self.areaValueManage.initAreaValue(deviceName = self.deviceName, curIndex= curIndex, valueList = valueList, dataTypeAndModel = dataTypeAndModel)
|
||||||
|
else:
|
||||||
|
self.areaValueManage.updataAreaValue(deviceName = self.deviceName, curIndex = curIndex, valueList = valueList, dataTypeAndModel = dataTypeAndModel)
|
Loading…
Reference in New Issue