0305更新

main
ZHANGXUXU\95193 2 years ago
parent 7090bbbcf9
commit f52e4e0f4e

@ -4,6 +4,13 @@ QMdiSubWindow {
font-size: 18px;
font-weight: bold;
}
QPushButton#okBtn, QPushButton#delAreaBtn, QPushButton#forceBtn {
font-size: 20px;
}
QPushButton#deviceAddButton, QPushButton#addareabutton {
color: #328ffc;
@ -14,6 +21,26 @@ QPushButton#deviceAddButton, QPushButton#addareabutton {
}
QLabel#dataTypeLabel, QLabel#dataOrderLabel, QLabel#byteLineLabel, QLabel#areaMessLabel, QLabel#areaValueLabel{
font-size: 20px;
}
QLineEdit#byteLineEdit, QLineEdit#areaLineEdit {
font-size: 20px;
}
QComboBox#dataTypeCombox, QComboBox#orderCombox{
font-size: 25px;
}
QTabBar::close-button {
@ -35,14 +62,14 @@ QPushButton#deviceAddButton, QPushButton#addareabutton {
QTabBar::tab:hover {
background-color: #809ac2;
background-color: #cbdeec;
}
QTabBar::tab{
background: #cbdeec;
background: #f0f0f0;
border: 2px;
@ -53,9 +80,6 @@ QTabBar::tab{
font: 17px;
font-family: ".SFNSDisplay-Regular";
@ -69,7 +93,7 @@ QTabBar#areaTabBar::tab{
QTabBar::tab:selected {
background-color: #f0f0f0;
background-color: #809ac2;
font: bold;

@ -1,29 +0,0 @@
class AreaWidgetManage:
def __init__(self):
# self.label = [] #主站AI DI与从站AODO,没有确定按钮
# self.lineEdit = [] #存放主站AODO与从站AIDI有确定按钮
self.areaAllWidgets = []
def addWidgets(self,areaWidgets):
#主站AI DI没有确定按钮 从站AIDI有确定按钮
#主站AODO有确定按钮 从站AODO没有确定按钮
self.areaAllWidgets.append(areaWidgets)
def getAllWidgets(self):
l = []
for areaWidgets in self.areaAllWidgets:
for areawidget in areaWidgets:
l.append(areawidget)
return l
def delareaWidget(self, index):
self.areaAllWidgets.pop(index)

@ -6,62 +6,12 @@ from tkinter import N
from functools import partial
from PyQt5.QtWidgets import QApplication, QMainWindow, QTabWidget, QWidget, QVBoxLayout, QLabel, QPushButton, QLayout, \
QHBoxLayout, QComboBox, QLineEdit, QSpacerItem, QSizePolicy, QGridLayout, QMessageBox, QSplitter, QFrame
from PyQt5.QtCore import QLine
from PyQt5.QtGui import QIcon
from numpy import add, byte, delete
from model.ProjectModel.AreaManage import Area
from model.ProjectModel.DeviceWidgetManage import DeviceWidgetManage
from UI.AreaMansge import AreaWidgetManage
from UI.AreaValueManage import AreaValueManage
from model.ProjectModel.DeviceManage import Device, DevicesManange
class forceButton(QPushButton):
def __init__(self, valueEdit):
super().__init__()
self.valueEdit = valueEdit
self.setText('强制')
class ButtonLayout(QWidget):
def __init__(self):
super().__init__()
# self.index = index
self.addLayout()
l = []
def addLayout(self):
self.setLayout(self.areaLayout())
def areaLayout(self):
areaLayout = QVBoxLayout()
for i in range(8):
hLayout = QHBoxLayout()
hLayout.addLayout(self.dateLayout())
hLayout.addWidget(QSplitter())
hLayout.addLayout(self.dateLayout())
areaLayout.addLayout(hLayout)
return areaLayout
def dateLayout(self, force = True):
forceLayout = QHBoxLayout()
areaMessLabel = QLabel('DO' + str(1) + ": " + '字节长度: ' + '22' + ' 当前值: ' )
areaValueLabel = QLabel('0')
forceLayout.addWidget(areaMessLabel)
forceLayout.addWidget(areaValueLabel)
if force:
areaLineEdit = QLineEdit('0')
forceBtn = forceButton(areaLineEdit)
forceBtn.clicked.connect(self.forceValues)
forceLayout.addWidget(areaLineEdit)
forceLayout.addWidget(forceBtn)
return forceLayout
def forceValues(self):
sender = self.sender()
print(sender.valueEdit.text())
from UI.ButtonLayoutWidget import ButtonLayout
@ -71,11 +21,12 @@ class AreaTabWidget(QTabWidget):
super().__init__()
self.deviceWidget = deviceWidget
self.areaValueManage = AreaValueManage()
self.initUI()
def initUI(self):
self.areaWidgetmanage = AreaWidgetManage()
self.deviceName = self.deviceWidget.deviceName
# 创建一个 QTabWidget
@ -100,7 +51,6 @@ class AreaTabWidget(QTabWidget):
# 设置主窗口的中心部分为 QTabWidget
def initWidget(self):
alldevices = DevicesManange.getAllDevice()
if alldevices:
@ -134,13 +84,13 @@ class AreaTabWidget(QTabWidget):
if init:
self.removeTab(0)
tabIndex = self.count()
areaWidget = AreaWidget(self, areaWidgetManage = self.areaWidgetmanage)
areaWidget = AreaWidget(self)
self.addTab(areaWidget, '通道' + str(tabIndex + 1))
self.setCurrentIndex(tabIndex)
self.tabBar().setHidden(False)
else:
tabIndex = self.count()
areaWidget = AreaWidget(self, settingValue, areaWidgetManage = self.areaWidgetmanage)
areaWidget = AreaWidget(self, settingValue)
self.addTab(areaWidget, '通道' + str(tabIndex + 1))
self.tabBar().setHidden(False)
@ -167,11 +117,11 @@ class AreaTabWidget(QTabWidget):
return dataType, order
class AreaWidget(QWidget):
def __init__(self, areaTabWidget, settingValue = None, areaWidgetManage = None):
def __init__(self, areaTabWidget, settingValue = None):
super().__init__()
self.areaTabWidget = areaTabWidget
self.settingValue = settingValue
self.areaWidgetManage = areaWidgetManage
self.areaValueManage = self.areaTabWidget.areaValueManage
self.initUI()
def initUI(self):
@ -182,6 +132,7 @@ class AreaWidget(QWidget):
self.rightLayout = QGridLayout()
self.dataTypeLabel = QLabel('数据类型:')
self.dataTypeLabel.setObjectName('dataTypeLabel')
# self.dataTypeLabel.setFixedSize(90, 27)
self.dataTypeCombox = QComboBox()
self.dataTypeCombox.addItems(['AI', 'AO', 'DI', 'DO'])
@ -189,12 +140,15 @@ class AreaWidget(QWidget):
# self.dataTypeCombox.setFixedSize(90, 27)
self.dataOrderLabel = QLabel('数据格式:')
self.dataOrderLabel.setObjectName('dataOrderLabel')
# self.dataOrderLabel.setFixedSize(90, 27)
self.orderCombox = QComboBox()
self.orderCombox.addItems(['不转换', '字节转换', '字转换', '字内转换'])
self.orderCombox.setObjectName('orderCombox')
# self.orderCombox.setFixedSize(90, 27)
self.byteLineLabel = QLabel('字节长度:')
self.byteLineLabel.setObjectName('byteLineLabel')
# self.byteLineLabel.setFixedSize(90, 27)
self.byteLineEdit = QLineEdit()
self.byteLineEdit.setPlaceholderText('字节长度')
@ -203,10 +157,12 @@ class AreaWidget(QWidget):
self.okBtn = QPushButton('确定')
# self.okBtn.setFixedSize(90, 27)
self.okBtn.setObjectName('okBtn')
self.okBtn.clicked.connect(self.addAreaWidget)
self.obBtnValue = True
self.delAreaBtn = QPushButton('删除')
self.delAreaBtn.setObjectName('delAreaBtn')
# self.delAreaBtn.setFixedSize(90, 27)
self.delAreaBtn.clicked.connect(self.removeAreaTab)
@ -222,15 +178,15 @@ class AreaWidget(QWidget):
self.rightWidget = ButtonLayout()
# self.rightLayout.addWidget(self.rightWidget)
self.rightWidget = QWidget()
self.rightLayout.addWidget(self.rightWidget)
line = QFrame()
line.setFrameShape(QFrame.VLine)
line.setLineWidth(2)
self.mainLayout.addLayout(self.leftLayout, 1)
self.mainLayout.addWidget(line)
self.mainLayout.addWidget(self.rightWidget, 9)
self.mainLayout.addLayout(self.rightLayout, 9)
self.mainLayout.setSpacing(20)
# self.deviceWidgetManage.addArea(mainLayout=mainLayout, leftLayoutWidget=leftLayoutWidgets)
@ -250,22 +206,11 @@ class AreaWidget(QWidget):
# alldevices = DevicesManange.getAllDevice()
# for device in alldevices:
# if deviceName in device:
# areas = device[3]
# if areas is not None:
# areas = json.loads(areas)
# if index >= len(areas):
# self.areaTabWidget.removeTab(index)
# return
if index != -1:
self.areaTabWidget.removeTab(index)
Device.delAreas(deviceName, index)
self.areaValueManage.delArea(deviceName = deviceName, curIndex = index)
# self.mainwindow.devicesManange.getDevice(deviceName).delArea(index, type)
# self.mainwindow.devicesManange.recalculateAddress()
if tabCount == 1:
@ -278,7 +223,7 @@ class AreaWidget(QWidget):
def addAreaWidget(self):
curIndex = self.areaTabWidget.currentIndex()
#获取左侧配置布局的参数
areaWidgets = []
areaLayout = self.rightLayout
deviceName = self.areaTabWidget.deviceName
#开启软件时判断数据库是否有存在设备信息,并执行相应的操作
@ -315,98 +260,38 @@ class AreaWidget(QWidget):
else:
self.okBtn.setText('确定')
self.dataTypeCombox.setEnabled(True )
self.orderCombox.setEnabled(True )
self.byteLineEdit.setEnabled(True )
self.dataTypeCombox.setEnabled(True)
self.orderCombox.setEnabled(True)
self.byteLineEdit.setEnabled(True)
self.obBtnValue = True
return
#删除布局内容
#修改配置后刷新布局内容
if self.settingValue is None:
self.areaWidgetManage.delareaWidget(curIndex)
while areaLayout.count():
items = areaLayout.takeAt(0)
if isinstance(items, QSpacerItem):
areaLayout.removeItem(items)
if isinstance(items, QHBoxLayout):
while items.count():
item = items.takeAt(0)
widget = item.widget()
print(widget)
if widget:
widget.setParent(None)
widget.deleteLater()
items.deleteLater()
# #添加布局
# if dataType in ['AI', 'AO']:
# if '主站' in deviceName and dataType == 'AI' or ('从站' in deviceName and dataType == 'AO'):
# buttonLayout = ButtonLayout(index = 1, dataType = dataType, byteLineEdit = byteLineEdit, devicetype = '主站AI')
# areaLayout.addLayout(buttonLayout, 0, 0)
# areaLayout.addItem(self.horizontalSpacer, 0, 1)
# areaLayout.addItem(self.verticalSpacer, 1, 0)
# areaWidgets.append([buttonLayout.areaLabe2])
# elif '主站' in deviceName and dataType == 'AO' or ('从站' in deviceName and dataType == 'AI'):
# buttonLayout = ButtonLayout(index = 0, dataType = dataType, byteLineEdit = byteLineEdit, devicetype = '主站AO' )
# areaLayout.addLayout(buttonLayout, 0, 0)
# areaLayout.addItem(self.horizontalSpacer, 0, 4)
# areaLayout.addItem(self.verticalSpacer, 1, 0)
# areaLineEdit = buttonLayout.areaLineEdit
# buttonLayout.editbtn.clicked.connect(lambda: self.wirteValue(areaLineEdit, dataType='主站AO'))
# areaWidgets.append([buttonLayout.areaLabe2, areaLineEdit,buttonLayout.editbtn])
# self.areaWidgetManage.addWidgets(areaWidgets)
# else:
# channelNumber = int(byteLineEdit) * 8
# if '主站' in deviceName and dataType == 'DI' or (
# '从站' in deviceName and dataType == 'DO'):
# for i in range(int(channelNumber)):
# buttonLayout = ButtonLayout(index = i + 1, dataType = dataType, byteLineEdit = byteLineEdit, devicetype = '主站DI' ) # type: ignore
# if i % 2 == 0:
# areaLayout.addLayout(buttonLayout, i // 2, i % 2)
# else:
# areaLayout.addLayout(buttonLayout, i // 2, i % 2 + 1 )
# areaWidgets.append([buttonLayout.areaLabe2])
# areaLayout.addItem(self.verticalSpacer, int(channelNumber) // 2 + 1, 0)
# self.areaWidgetManage.addWidgets(areaWidgets)
# if '主站' in deviceName and dataType == 'DO' or (
# '从站' in deviceName and dataType == 'DI'):
# for i in range(int(channelNumber)):
# buttonLayout = ButtonLayout(index = i + 1, dataType = dataType, byteLineEdit = byteLineEdit, devicetype = '主站DO' ) # type: ignore
# if i % 2 == 0:
# areaLayout.addLayout(buttonLayout, i // 2, i % 2)
# areaLineEdit = buttonLayout.areaLineEdit
# buttonLayout.editbtn.clicked.connect(partial(self.wirteValue, areaLineEdit, '主站DO'))
# else:
# areaLayout.addLayout(buttonLayout, i // 2, i % 2 + 1 )
# areaLineEdit = buttonLayout.areaLineEdit
# buttonLayout.editbtn.clicked.connect(partial(self.wirteValue, areaLineEdit, '主站DO'))
# areaWidgets.append([buttonLayout.areaLabe2, areaLineEdit,buttonLayout.editbtn])
# areaLayout.addItem(self.verticalSpacer, int(channelNumber) // 2 + 1, 0)
# self.areaWidgetManage.addWidgets(areaWidgets)
# index = curIndex + 1
# areaId = DevicesManange.getAreaID(deviceName)
# if self.settingValue is not None:
# return
# elif areaId is not None and index in areaId:
widget = items.widget()
if widget:
widget.setParent(None)
widget.deleteLater()
#添加按钮布局
buttonLayout = ButtonLayout(self, order = order, byteLineEdit = byteLineEdit, dataType = dataType, deviceName = deviceName)
areaLayout.addWidget(buttonLayout)
# DevicesManange.updataAreas(dataType, order, byteLineEdit, deviceName, index)
# else:
# DevicesManange.addAreas(dataType, order, byteLineEdit, deviceName)
areaId = DevicesManange.getAreaID(deviceName)
if self.settingValue is not None:
return
elif areaId is not None and curIndex in areaId:
DevicesManange.updataAreas(dataType, order, byteLineEdit, deviceName, curIndex)
else:
DevicesManange.addAreas(dataType, order, byteLineEdit, deviceName)
@ -434,89 +319,29 @@ class AreaWidget(QWidget):
self.dataTypeDict = {'不转换': 'ABCD', '字节转换': 'DCBA', '字转换': 'CDAB', '字内转换': 'BADC'}
return self.dataTypeDict[order]
def wirteValue(self, editbtn, dataType = None):
#判断输入值是否为数字
if dataType == '主站AO':
editbtnText = editbtn.text()
print(editbtn, editbtnText)
pattern = re.compile(r'^\d+(\.\d+)?$')
match = pattern.match(editbtnText)
if not match:
QMessageBox.warning(self, '提示', '请输入数字。')
return
#判断输入值是否为0和1
elif dataType == '主站DO':
editbtnText = editbtn.text()
print(editbtn, editbtnText, 'sssss')
pattern = re.compile(r'^[01]+$')
match = pattern.match(editbtnText)
if not match:
QMessageBox.warning(self, '提示', '请输入0或1。')
return
areaWidgets = self.areaWidgetManage.getAllWidgets()
valueList = []
didoValueList = []
if areaWidgets:
for areaWidget in areaWidgets:
if editbtn in areaWidget:
areaWidget[0].setText(areaWidget[1].text())
if isinstance(areaWidget[1], QLineEdit):
didoValueList.append(float(areaWidget[1].text()))
print(didoValueList)
if didoValueList:
valueList.append(didoValueList)
didoValueList = []
# self.mainwindow.devicesManange.writeAreas(deviceName = deviceName, values = valueList)
def wirteValue(self, deviceName, dataTypeAndModel ):
# valueList = []
# didoValueList = []
# if len(self.widgetList) > 0:
# for widgetLists in self.widgetList:
# for widgetList in widgetLists:
# if editBtn in widgetList:
# widgetList[0].setText(widgetList[1].text())
deviceValuelist = self.areaValueManage.getAreaValueList(deviceName = deviceName, dataTypeAndModel = dataTypeAndModel)
print(deviceValuelist)
# self.mainwindow.devicesManange.writeAreas(deviceName = deviceName, values = valueList)
# if isinstance(widgetList[1], QLineEdit):
# dataType = widgetList[-1].text()[0:2]
# # if dataType in ['DI', "DO"]:
# didoValueList.append(float(widgetList[1].text()))
# if didoValueList:
# valueList.append(didoValueList)
# didoValueList = []
# self.mainwindow.devicesManange.writeAreas(deviceName = deviceName, values = valueList)
def readValue(self):
deviceName = self.mainwindow.devicesManange.getDeviceName(self)
curIndex = -1
areaIndex = self.areaTabWidget.currentIndex()
if len(self.widgetList) > 0:
inputIndex = 0
for index, widgetLists in enumerate(self.widgetList): #获取所有区域的所有的widgetlist
for widgetList in widgetLists:
#获取单个widgetlist
if isinstance(widgetList[1], QLineEdit):
pass
else:
# areaWidgets.append(widgetList)
if areaIndex == index:
curIndex = inputIndex
inputIndex += 1
break
if curIndex == -1:
return
else:
device = self.mainwindow.devicesManange.getDevice(deviceName)
values = device.getAreaValues(curIndex)
areaWidgets = self.widgetList[areaIndex]
for value, widgets in zip(values, areaWidgets):
widgets[0].setText(str(value))
def readValue(self,deviceName, dataTypeAndModel):
areaWidgets = self.areaValueManage.getAreaValueList(deviceName = deviceName, dataTypeAndModel = dataTypeAndModel)
print(areaWidgets,aaa)
# if curIndex == -1:
# return
# else:
# device = self.mainwindow.devicesManange.getDevice(deviceName)
# values = device.getAreaValues(curIndex)
# areaWidgets = self.widgetList[areaIndex]
# for value, widgets in zip(values, areaWidgets):
# widgets[0].setText(str(value))

@ -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)

@ -17,6 +17,7 @@ class DeviceWidget(QMainWindow):
super().__init__()
self.dockWidget = dockWidget
self.forceValues = []
self.initUI()
@ -44,7 +45,7 @@ class DeviceWidget(QMainWindow):
self.deviceTabWidget.setTabsClosable(True)
self.deviceTabWidget.tabCloseRequested.connect(self.closeTab)
self.initWidget()
self.initWidget(True)
# 设置主窗口的中心部分为 QTabWidget
self.setCentralWidget(self.deviceTabWidget)
@ -59,7 +60,7 @@ class DeviceWidget(QMainWindow):
else:
return
if self.deviceTabWidget.count() == 0:
self.initWidget()
self.initWidget(True)
@ -81,7 +82,7 @@ class DeviceWidget(QMainWindow):
else:
return
else:
self.deviceTabWidget.removeTab(0)
self.deviceName = deviceName
self.titleName = self.deviceName[:-4]
areaTabWidget = AreaTabWidget(self)
@ -89,18 +90,7 @@ class DeviceWidget(QMainWindow):
self.deviceTabWidget.addTab(areaTabWidget,str(self.titleName))
def initWidget(self):
widget = QWidget()
layout = QHBoxLayout()
addButton = QPushButton('添加设备')
addButton.clicked.connect(lambda: self.addDeviceWidget(True))
layout.addItem(self.horizontalSpacer)
layout.addWidget(addButton)
layout.addItem(self.horizontalSpacer)
widget.setLayout(layout)
self.deviceTabWidget.addTab(widget,'')
self.deviceTabWidget.tabBar().setHidden(True)
def initWidget(self,state):
alldevices = DevicesManange.getAllDevice()
titleName = self.dockWidget.windowTitle()
if alldevices:
@ -109,45 +99,59 @@ class DeviceWidget(QMainWindow):
deviceName = devices[0]
if titleName in deviceName:
self.addDeviceWidget(deviceName=deviceName)
state = False
if state:
widget = QWidget()
layout = QHBoxLayout()
addButton = QPushButton('添加设备')
addButton.clicked.connect(lambda: self.addDeviceWidget(True))
layout.addItem(self.horizontalSpacer)
layout.addWidget(addButton)
layout.addItem(self.horizontalSpacer)
widget.setLayout(layout)
self.deviceTabWidget.addTab(widget,'')
self.deviceTabWidget.tabBar().setHidden(True)
def initAreaWidget(self, mdiarea):
alldevices = DevicesManange.getAllDevice()
for devices in alldevices:
areas = devices[3]
deviceWidget = self.deviceWidget(devices[0], mdiarea) #新建deviceWidget
areaTabWidget = deviceWidget.widget().widget().centralWidget() # type: ignore
self.devicesManange.addDevice(proType = devices[1], masterSlaveModel = devices[2], deviceName = devices[0], deviceWidget = deviceWidget, areaTabWidget = areaTabWidget) # type: ignore
if areas is not None:
areas = json.loads(areas)
for area in areas:
dataType, order = self.tran(area["type"], area["order"])
channelBytes = area["bytes"]
dev = self.devicesManange.getDevice(deviceName = devices[0])
dev.addArea(type = area["type"], order = area["order"], bytes = int(channelBytes), nums = 1) #添加area
areaTabWidget.initAreaTab(dataType, order, channelBytes)
self.devicesManange.recalculateAddress()
def createDeciveWidget(self, mdiarea):
dialog = DeviceDialog()
if dialog.exec_() == QDialog.Accepted:
deviceName, proType, masterSlaveModel, pvUpperLimit, pvLowerLimit, pvUnit = dialog.getParameters()
windowTitle = deviceName + ' ' + proType + masterSlaveModel + ' ' + pvLowerLimit + '-' + pvUpperLimit + pvUnit
DeviceDB().addDevice(deviceName = windowTitle, proType = proType, masterSlaveModel = masterSlaveModel, pvUpperLimit=pvUpperLimit, pvLowerLimit=pvLowerLimit, pvUnit=pvUnit)
deviceWidget = self.deviceWidget(windowTitle, mdiarea)
areaTabWidget = deviceWidget.widget().widget().centralWidget()
self.devicesManange.addDevice(proType = proType, masterSlaveModel = masterSlaveModel, deviceName = windowTitle, deviceWidget = deviceName, areaTabWidget = areaTabWidget)
self.devicesManange.recalculateAddress()
else:
return
# def initAreaWidget(self, mdiarea):
# alldevices = DevicesManange.getAllDevice()
# for devices in alldevices:
# areas = devices[3]
# deviceWidget = self.deviceWidget(devices[0], mdiarea) #新建deviceWidget
# areaTabWidget = deviceWidget.widget().widget().centralWidget() # type: ignore
# self.devicesManange.addDevice(proType = devices[1], masterSlaveModel = devices[2], deviceName = devices[0], deviceWidget = deviceWidget, areaTabWidget = areaTabWidget) # type: ignore
# if areas is not None:
# areas = json.loads(areas)
# for area in areas:
# dataType, order = self.tran(area["type"], area["order"])
# channelBytes = area["bytes"]
# dev = self.devicesManange.getDevice(deviceName = devices[0])
# dev.addArea(type = area["type"], order = area["order"], bytes = int(channelBytes), nums = 1) #添加area
# areaTabWidget.initAreaTab(dataType, order, channelBytes)
# self.devicesManange.recalculateAddress()
# def createDeciveWidget(self, mdiarea):
# dialog = DeviceDialog()
# if dialog.exec_() == QDialog.Accepted:
# deviceName, proType, masterSlaveModel, pvUpperLimit, pvLowerLimit, pvUnit = dialog.getParameters()
# windowTitle = deviceName + ' ' + proType + masterSlaveModel + ' ' + pvLowerLimit + '-' + pvUpperLimit + pvUnit
# DeviceDB().addDevice(deviceName = windowTitle, proType = proType, masterSlaveModel = masterSlaveModel, pvUpperLimit=pvUpperLimit, pvLowerLimit=pvLowerLimit, pvUnit=pvUnit)
# deviceWidget = self.deviceWidget(windowTitle, mdiarea)
# areaTabWidget = deviceWidget.widget().widget().centralWidget()
# self.devicesManange.addDevice(proType = proType, masterSlaveModel = masterSlaveModel, deviceName = windowTitle, deviceWidget = deviceName, areaTabWidget = areaTabWidget)
# self.devicesManange.recalculateAddress()
# else:
# return

@ -64,7 +64,8 @@ class MainWindow(QMainWindow):
self.showMaximized()
def startProtocol(self):
pass
sender = self.sender
def loadProject(self):
pass

@ -109,10 +109,14 @@ class Device():
@classmethod
def delAreas(self, deviceName, id):
jsonCon = json.loads(DeviceDB.getByName(deviceName=deviceName).areaJson)
jsonCon.pop(id)
print(len(jsonCon))
if len(jsonCon) > id:
jsonCon.pop(id)
else:
return
if jsonCon == []:
areaJson = None
areaJson = '[]'
DeviceDB.update(areaJson=areaJson).where(DeviceDB.deviceName == deviceName).execute()
else:
for index, areajsonId in enumerate(jsonCon):
@ -125,8 +129,8 @@ class Device():
@classmethod
def getAreaJson(self, deviceNames):
deviceName = deviceNames
jsonConsStr = DeviceDB.getByName(deviceName=deviceName).areaJson
if jsonConsStr is None:
jsonConsStr = json.loads(DeviceDB.getByName(deviceName=deviceName).areaJson)
if jsonConsStr == []:
return
else:
jsonCons = json.loads(jsonConsStr)
@ -306,16 +310,16 @@ class DevicesManange():
# print(area.currentValue)
@classmethod
def addAreas(self, type, order, bytes, deviceName):
if DeviceDB.getByName(deviceName=deviceName).areaJson is None:
jsonCon = json.loads(DeviceDB.getByName(deviceName=deviceName).areaJson)
if jsonCon == []:
jsonCon = ([{
"id": 1,
"id": 0,
"type": type,
"order": order,
"bytes": bytes,
}])
else:
jsonCon = json.loads(DeviceDB.getByName(deviceName=deviceName).areaJson)
id = jsonCon[-1]["id"] + 1
jsonCon.append({
"id": id,
@ -328,10 +332,10 @@ class DevicesManange():
@classmethod
def updataAreas(self, type, order, bytes, deviceName, index):
if DeviceDB.getByName(deviceName=deviceName) is None:
jsonCon = json.loads(DeviceDB.getByName(deviceName=deviceName).areaJson)
if jsonCon == []:
return False
else:
jsonCon = json.loads(DeviceDB.getByName(deviceName=deviceName).areaJson)
for area in jsonCon:
if index == area["id"]:
area["type"] = type

Loading…
Cancel
Save