0307更新

main
ZHANGXUXU\95193 2 years ago
parent f52e4e0f4e
commit 8e09177e64

@ -2,6 +2,7 @@
QMdiSubWindow {
font-size: 18px;
font-weight: bold;
}
@ -15,11 +16,31 @@ QPushButton#deviceAddButton, QPushButton#addareabutton {
color: #328ffc;
font-size: 17px;
font-size: 21px;
}
QPushButton#initAddDeviceButton, QPushButton#initAreaAddButton{
font-size: 45px;
color: #328ffc;
background-color: rgba(255, 255, 255, 0);
}
QPushButton#initAddDeviceButton:hover, QPushButton#initAreaAddButton:hover{
color: #1a86d8;
font: bold;
border-radius: 3px;
margin-bottom: -4px
}
QLabel#dataTypeLabel, QLabel#dataOrderLabel, QLabel#byteLineLabel, QLabel#areaMessLabel, QLabel#areaValueLabel{
@ -27,6 +48,12 @@ QLabel#dataTypeLabel, QLabel#dataOrderLabel, QLabel#byteLineLabel, QLabel#areaMe
}
QLabel#areaValueLabel{
color: #0160aa;
}
QLineEdit#byteLineEdit, QLineEdit#areaLineEdit {
@ -43,7 +70,7 @@ QComboBox#dataTypeCombox, QComboBox#orderCombox{
}
QTabBar::close-button {
QTabBar::close-button {
image: url(Static/close.png);
@ -54,10 +81,10 @@ QComboBox#dataTypeCombox, QComboBox#orderCombox{
margin-left: 4px;
}
QTabBar::close-button:hover {
QTabBar::close-button:hover {
background-color: #cccccc;
}
}
QTabBar::tab:hover {
@ -75,10 +102,9 @@ QTabBar::tab{
min-width: 200px;
min-height: 30px;
font: 17px;
min-height: 40px;
font: 20px;
font-family: ".SFNSDisplay-Regular";
@ -87,6 +113,8 @@ QTabBar::tab{
QTabBar#areaTabBar::tab{
min-width: 100px;
font: 20px;
}

@ -8,10 +8,10 @@ from PyQt5.QtWidgets import QApplication, QMainWindow, QTabWidget, QWidget, QVBo
QHBoxLayout, QComboBox, QLineEdit, QSpacerItem, QSizePolicy, QGridLayout, QMessageBox, QSplitter, QFrame
from PyQt5.QtGui import QIcon
from model.ProjectModel.DeviceWidgetManage import DeviceWidgetManage
from UI.AreaValueManage import AreaValueManage
from PyQt5.QtCore import QSize
from model.ProjectModel.DeviceManage import Device, DevicesManange
from UI.ButtonLayoutWidget import ButtonLayout
from UI.ButtonLayoutWidget import ButtonWidgets
@ -20,8 +20,8 @@ class AreaTabWidget(QTabWidget):
def __init__(self, deviceWidget):
super().__init__()
self.deviceWidget = deviceWidget
self.areaValueManage = AreaValueManage()
self.devicesManange = self.deviceWidget.devicesManange
self.initUI()
@ -29,7 +29,7 @@ class AreaTabWidget(QTabWidget):
self.deviceName = self.deviceWidget.deviceName
# 创建一个 QTabWidget
self.setObjectName('areaTabWidget')
self.setTabPosition(QTabWidget.South)
self.tabBar().setObjectName('areaTabBar')
self.addAreaButton = QPushButton("添加区域")
@ -68,6 +68,11 @@ class AreaTabWidget(QTabWidget):
widget = QWidget()
layout = QHBoxLayout()
addButton = QPushButton('添加区域')
addButton.setObjectName('initAreaAddButton')
icon = QIcon('Static/add.png')
iconSize = QSize(50,50)
addButton.setIcon(icon)
addButton.setIconSize(iconSize)
addButton.clicked.connect(lambda: self.addAreaTab(True))
layout.addWidget(QSplitter())
layout.addWidget(addButton)
@ -121,7 +126,7 @@ class AreaWidget(QWidget):
super().__init__()
self.areaTabWidget = areaTabWidget
self.settingValue = settingValue
self.areaValueManage = self.areaTabWidget.areaValueManage
self.devicesManange = self.areaTabWidget.devicesManange
self.initUI()
def initUI(self):
@ -137,6 +142,7 @@ class AreaWidget(QWidget):
self.dataTypeCombox = QComboBox()
self.dataTypeCombox.addItems(['AI', 'AO', 'DI', 'DO'])
self.dataTypeCombox.setObjectName('dataTypeCombox')
self.dataTypeCombox.currentIndexChanged.connect(self.setByteLineEditValue)
# self.dataTypeCombox.setFixedSize(90, 27)
self.dataOrderLabel = QLabel('数据格式:')
@ -159,27 +165,29 @@ class AreaWidget(QWidget):
# self.okBtn.setFixedSize(90, 27)
self.okBtn.setObjectName('okBtn')
self.okBtn.clicked.connect(self.addAreaWidget)
self.obBtnValue = True
self.okBtnValue = True
self.delAreaBtn = QPushButton('删除')
self.delAreaBtn.setObjectName('delAreaBtn')
# self.delAreaBtn.setFixedSize(90, 27)
self.delAreaBtn.clicked.connect(self.removeAreaTab)
hLayout = QHBoxLayout()
hLayout.addWidget(self.okBtn)
hLayout.addWidget(self.delAreaBtn)
self.leftLayout.addWidget(self.dataTypeLabel, 0, 0, 1, 1)
self.leftLayout.addWidget(self.dataTypeCombox, 0, 1, 1, 1)
self.leftLayout.addWidget(self.dataOrderLabel,1, 0, 1, 1 )
self.leftLayout.addWidget(self.orderCombox,1, 1, 1, 1 )
self.leftLayout.addWidget(self.byteLineLabel,2, 0, 1, 1 )
self.leftLayout.addWidget(self.byteLineEdit,2, 1, 1, 1 )
self.leftLayout.addWidget(self.okBtn, 3, 0, 1, 1)
self.leftLayout.addWidget(self.delAreaBtn, 3, 1, 1, 1)
self.leftLayout.addLayout(hLayout, 3, 0, 1, 2)
# self.leftLayout.addWidget(self.delAreaBtn, 3, 1, 1, 1)
self.rightWidget = QWidget()
self.rightLayout.addWidget(self.rightWidget)
self.rightLayout.addWidget(QWidget())
line = QFrame()
line.setFrameShape(QFrame.VLine)
line.setLineWidth(2)
@ -196,25 +204,37 @@ class AreaWidget(QWidget):
self.addAreaWidget()
self.settingValue = None
def setByteLineEditValue(self):
byteLineEditValue = self.dataTypeCombox.currentText()
if byteLineEditValue in ['DI','DO']:
self.byteLineEdit.setText('2')
self.byteLineEdit.setEnabled(False)
else:
self.byteLineEdit.setEnabled(True)
def removeAreaTab(self):
# 获取 QTabWidget 并从中删除标签页
deviceName = self.areaTabWidget.deviceName
# 只点击了新建去域按钮,未点击确定按钮时,直接点击删除按钮的删除情况
index = self.areaTabWidget.currentIndex()
tabCount = self.areaTabWidget.count()
if self.okBtn.text() == '确定':
if index != -1:
self.areaTabWidget.removeTab(index)
if tabCount == 1:
self.areaTabWidget.initWidget()
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:
self.areaTabWidget.initWidget()
#正常点击删除按钮的情况
else:
deviceName = self.areaTabWidget.deviceName
datatype = self.dataTypeCombox.currentText()
if index != -1:
self.areaTabWidget.removeTab(index)
Device.delAreas(deviceName, index)
self.devicesManange.getDevice(deviceName).delArea(index, datatype)
self.devicesManange.recalculateAddress()
if tabCount == 1:
self.areaTabWidget.initWidget()
@ -251,33 +271,34 @@ class AreaWidget(QWidget):
return
else:
#设置点击确定后无法编辑,点击编辑后才能编辑
if self.obBtnValue:
if self.okBtnValue:
self.okBtn.setText('编辑')
self.dataTypeCombox.setEnabled(False )
self.orderCombox.setEnabled(False )
self.byteLineEdit.setEnabled(False )
self.obBtnValue = False
else:
self.okBtnValue = False
if dataType in ['DI','DO']:
self.okBtn.setEnabled(False)
elif dataType in ['AI','AO']:
self.okBtn.setText('确定')
self.dataTypeCombox.setEnabled(True)
# self.dataTypeCombox.setEnabled(True)
self.orderCombox.setEnabled(True)
self.byteLineEdit.setEnabled(True)
self.obBtnValue = True
return
self.okBtnValue = True
#修改配置后刷新布局内容
if self.settingValue is None:
while areaLayout.count():
items = areaLayout.takeAt(0)
widget = items.widget()
if widget:
widget.setParent(None)
widget.deleteLater()
# if self.settingValue is None:
while areaLayout.count():
items = areaLayout.takeAt(0)
widget = items.widget()
if widget:
widget.setParent(None)
widget.deleteLater()
#添加按钮布局
buttonLayout = ButtonLayout(self, order = order, byteLineEdit = byteLineEdit, dataType = dataType, deviceName = deviceName)
areaLayout.addWidget(buttonLayout)
buttonWidgets = ButtonWidgets(self, order = order, byteLineEdit = byteLineEdit, dataType = dataType, deviceName = deviceName)
areaLayout.addWidget(buttonWidgets,0,0)
@ -285,31 +306,22 @@ class AreaWidget(QWidget):
areaId = DevicesManange.getAreaID(deviceName)
if self.settingValue is not None:
self.devicesManange.getDevice(deviceName).addArea(type = dataType, bytes = int(byteLineEdit), order = order, nums = 1)
return
elif areaId is not None and curIndex in areaId:
DevicesManange.updataAreas(dataType, order, byteLineEdit, deviceName, curIndex)
self.devicesManange.getDevice(deviceName).editArea(index = curIndex, type = dataType, order = order, bytes = int(byteLineEdit))
# self.readVarTimer.start(500)
else:
DevicesManange.addAreas(dataType, order, byteLineEdit, deviceName)
self.devicesManange.getDevice(deviceName).addArea(type = dataType, bytes = int(byteLineEdit), order = order, nums = 1)
self.devicesManange.recalculateAddress()
# self.readVarTimer.start(500)
# if areaId is not None and index in areaId:
# # if loacl:
# # del self.widgetList[index - 1]
# if init:
# return
# DevicesManange.updataAreas(dataType, order, byteLineEdit, deviceName, index)
# self.mainwindow.devicesManange.getDevice(deviceName).editArea(index = index - 1, type = dataType, order = order, bytes = int(byteLineEdit))
# self.mainwindow.devicesManange.recalculateAddress()
# self.mainwindow.readVarTimer.start(500)
# else:
# DevicesManange.addAreas(dataType, order, byteLineEdit, deviceName)
# self.mainwindow.devicesManange.getDevice(deviceName).addArea(type = dataType, bytes = int(byteLineEdit), order = order, nums = 1)
# self.mainwindow.devicesManange.recalculateAddress()
# self.mainwindow.readVarTimer.start(500)
@ -319,30 +331,36 @@ class AreaWidget(QWidget):
self.dataTypeDict = {'不转换': 'ABCD', '字节转换': 'DCBA', '字转换': 'CDAB', '字内转换': 'BADC'}
return self.dataTypeDict[order]
def wirteValue(self, deviceName, dataTypeAndModel ):
deviceValuelist = self.areaValueManage.getAreaValueList(deviceName = deviceName, dataTypeAndModel = dataTypeAndModel)
print(deviceValuelist)
# self.mainwindow.devicesManange.writeAreas(deviceName = deviceName, values = valueList)
def wirteValue(self, deviceName, curIndex, valueList):
print(deviceName,curIndex, valueList )
# self.devicesManange.writeAreas(deviceName = deviceName, values = valueList)
def readValue(self,deviceName, dataTypeAndModel):
areaWidgets = self.areaValueManage.getAreaValueList(deviceName = deviceName, dataTypeAndModel = dataTypeAndModel)
print(areaWidgets,aaa)
# if curIndex == -1:
# return
def readValue(self,deviceName, curIndex):
print(deviceName, curIndex)
# if curIndex == -1:
# return
# else:
# device = self.devicesManange.getDevice(deviceName)
# values = device.getAreaValues(curIndex)
# i = 0
# for value in values:
# areaLabel[i].setText(str(value))
# i =+ 1
#
# 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))
if __name__ == '__main__':

@ -1,86 +0,0 @@
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

@ -1,29 +1,31 @@
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):
def __init__(self, number = None, valueLabel = None, valueEdit = None):
super().__init__()
self.valueEdit = valueEdit
self.valueLabel= valueLabel
self.valueLabel = valueLabel
self.number = number
self.setObjectName('forceBtn')
self.setText('强制')
class ButtonLayout(QWidget):
class ButtonWidgets(QWidget):
def __init__(self, areaWidget, order, byteLineEdit, dataType, deviceName):
super().__init__()
self.areaLineEditWidgets = []
self.areaLabelWidget = []
self.areaLineEditValue = []
self.areaLabel = {}
self.areaWidget = areaWidget
self.devicesManange = self.areaWidget.devicesManange
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()
# self.setStyleSheet("background-color: black")
@ -36,26 +38,32 @@ class ButtonLayout(QWidget):
print(self.dataType)
if self.dataType in ['AI','AO']:
hLayout = QHBoxLayout()
hLayout.addWidget(QSplitter())
hLayout.addLayout(self.dateLayout(1))
hLayout.addWidget(QSplitter())
areaLayout.addWidget(QSplitter())
areaLayout.addLayout(hLayout)
areaLayout.addWidget(QSplitter())
else:
byteLineEdit = int(self.byteLineEdit) * 4
areaLayout.addWidget(QSplitter())
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))
hLayout.addWidget(QSplitter(), 2)
hLayout.addLayout(self.dateLayout(number = (i + 1)), 6)
hLayout.addWidget(QSplitter(), 2)
hLayout.addLayout(self.dateLayout(number = (i + 1) + 8), 6)
hLayout.addWidget(QSplitter(), 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 = QLabel(str(self.dataType) + "{:<{}}".format(str(number), 2) + ": " + '字节长度: ' + str(self.byteLineEdit) + ' 当前值: ' )
areaMessLabel.setObjectName('areaMessLabel')
areaValueLabel = QLabel('0')
areaValueLabel.setObjectName('areaValueLabel')
@ -65,77 +73,76 @@ class ButtonLayout(QWidget):
if '主站' in self.deviceName and self.dataType == 'AI' or ('从站' in self.deviceName and self.dataType == 'AO'):
force = False
self.areaLabelWidget.append(areaValueLabel)
self.areaLabel[number] = areaValueLabel
elif '主站' in self.deviceName and self.dataType == 'DI' or ('从站' in self.deviceName and self.dataType == 'DO'):
force = False
self.areaLabelWidget.append(areaValueLabel)
self.areaLabel[number] = areaValueLabel
if force:
areaLineEdit = QLineEdit('0')
areaLineEdit.setObjectName('areaLineEdit')
forceBtn = forceButton(valueLabel=areaValueLabel, valueEdit=areaLineEdit)
forceBtn = forceButton(number = number, valueLabel=areaValueLabel, valueEdit=areaLineEdit)
forceBtn.clicked.connect(self.forceValues)
forceLayout.addWidget(areaLineEdit)
forceLayout.addWidget(forceBtn)
self.areaLineEditWidgets.append(forceBtn)
self.areaLineEditValue.append('0')
forceLayout.setSpacing(10)
return forceLayout
def wirteAreaLineEditValue(self,dataTypeAndModel):
areaValueList = []
def wirteAreaLineEditValue(self,dataTypeAndModel, valueLabel, number, value):
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
pattern = re.compile(r'^\d+(\.\d+)?$')
match = pattern.match(value)
if not match:
QMessageBox.warning(self, '提示', '请输入数字。')
return
else:
valueLabel.setText(value)
self.areaLineEditValue[number -1] = value
#判断输入值是否为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))
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
return self.areaLineEditValue
def readValues(self,deviceName, curIndex):
if self.areaLabel is None:
return
elif curIndex == -1:
return
else:
device = self.devicesManange.getDevice(deviceName)
# print(id(device))
values = device.getAreaValues(curIndex)
for index, value in enumerate(values):
self.areaLabel[index+1].setText(str(value))
def forceValues(self):
sender = self.sender()
number = sender.number
valueLabel = sender.valueLabel
value = sender.valueEdit.text()
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)
valueList = self.wirteAreaLineEditValue(dataTypeAndModel=dataTypeAndModel, valueLabel=valueLabel,number=number, value=value)
if valueList is None:
return
else:
self.areaValueManage.updataAreaValue(deviceName = self.deviceName, curIndex = curIndex, valueList = valueList, dataTypeAndModel = dataTypeAndModel)
self.areaWidget.wirteValue(deviceName = self.deviceName, curIndex = curIndex, valueList = valueList)

@ -2,6 +2,7 @@ import json
from PyQt5.QtWidgets import QMainWindow, QDialog, QTabWidget, QPushButton, QSpacerItem, QSizePolicy,QMessageBox, QHBoxLayout, QWidget
from PyQt5.QtGui import QIcon
from PyQt5.QtCore import QSize
from UI.DeviceDialogWidget import DeviceDialog
@ -11,13 +12,13 @@ from UI.AreaTabWidget import AreaTabWidget
from utils.DBModels.DeviceModels import DeviceDB
from model.ProjectModel.DeviceManage import DevicesManange
from UI.DeviceDialogWidget import DeviceDialog
from model.ProjectModel.DeviceWidgetManage import DeviceWidgetManage
class DeviceWidget(QMainWindow):
def __init__(self, dockWidget):
def __init__(self, dockWidget, devicesManange):
super().__init__()
self.dockWidget = dockWidget
self.forceValues = []
self.devicesManange = devicesManange
self.initUI()
@ -27,7 +28,7 @@ class DeviceWidget(QMainWindow):
self.proType = self.dockWidget.windowTitle()[0:2]
self.masterSlaveModel = self.dockWidget.windowTitle()[2:4]
# self.deviceWidgetManage = DeviceWidgetManage()
self.deviceTabWidget = QTabWidget(self)
self.deviceTabWidget.setObjectName('deviceTabWidget')
@ -56,6 +57,7 @@ class DeviceWidget(QMainWindow):
if reply == QMessageBox.Yes:
if index != -1:
self.deviceTabWidget.removeTab(index)
self.devicesManange.delDevice(deviceName = self.deviceName)
DeviceDB.deleteDevice(deviceName = self.deviceName)
else:
return
@ -78,7 +80,7 @@ class DeviceWidget(QMainWindow):
self.deviceTabWidget.tabBar().setHidden(False)
self.deviceTabWidget.addTab(areaTabWidget,str(self.titleName))
self.deviceTabWidget.setCurrentIndex(tabIndex)
# self.deviceWidgetManage.addDevice(deviceName = self.deviceName, areaTabWidget=areaTabWidget, dockWidget=self.dockWidget)
self.devicesManange.addDevice(proType=self.proType, masterSlaveModel = self.masterSlaveModel, deviceName = self.deviceName)
else:
return
else:
@ -87,23 +89,31 @@ class DeviceWidget(QMainWindow):
self.titleName = self.deviceName[:-4]
areaTabWidget = AreaTabWidget(self)
self.deviceTabWidget.tabBar().setHidden(False)
self.deviceTabWidget.addTab(areaTabWidget,str(self.titleName))
self.deviceTabWidget.addTab(areaTabWidget,str(self.titleName))
def initWidget(self,state):
alldevices = DevicesManange.getAllDevice()
titleName = self.dockWidget.windowTitle()
if alldevices:
for devices in alldevices:
# self.devicesManange.addDevice(proType = devices[1], masterSlaveModel = devices[2], deviceName = devices[0])
deviceName = devices[0]
if titleName in deviceName:
self.devicesManange.addDevice(proType = devices[1], masterSlaveModel = devices[2], deviceName = devices[0])
self.addDeviceWidget(deviceName=deviceName)
state = False
if state:
widget = QWidget()
layout = QHBoxLayout()
addButton = QPushButton('添加设备')
addButton.setObjectName('initAddDeviceButton')
icon = QIcon('Static/add.png')
iconSize = QSize(50,50)
addButton.setIcon(icon)
addButton.setIconSize(iconSize)
addButton.clicked.connect(lambda: self.addDeviceWidget(True))
layout.addItem(self.horizontalSpacer)
layout.addWidget(addButton)
@ -111,49 +121,11 @@ class DeviceWidget(QMainWindow):
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

@ -1,11 +1,12 @@
import sys
from PyQt5.QtWidgets import QApplication, QMainWindow, QDockWidget, QToolBar, QAction
from PyQt5.QtWidgets import QApplication, QMainWindow, QDockWidget, QToolBar, QAction, QTabWidget, QGridLayout
from PyQt5.QtCore import Qt
from PyQt5.QtGui import QIcon
from utils.DBModels.BaseModel import *
from model.ClientModel.Client import Client
from UI.DeviceWidget import DeviceWidget
from model.ProjectModel.DeviceManage import DevicesManange
class CommonHelper:
def __init__(self):
@ -20,6 +21,7 @@ class CommonHelper:
class MainWindow(QMainWindow):
def __init__(self):
super().__init__()
self.devicesManange = DevicesManange()
self.initUI()
def initUI(self):
@ -39,19 +41,19 @@ class MainWindow(QMainWindow):
self.toolbar.addAction(self.startProtocolBtn)
dpMasterDockWidget = QDockWidget('DP主站')
dpMasterDockWidget.setWidget(DeviceWidget(dpMasterDockWidget))
dpMasterDockWidget.setWidget(DeviceWidget(dpMasterDockWidget, self.devicesManange))
dpMasterDockWidget.setFeatures(QDockWidget.DockWidgetMovable | QDockWidget.DockWidgetFloatable) # type: ignore
dpSlaveDockWidget = QDockWidget('DP从站')
dpSlaveDockWidget.setWidget(DeviceWidget(dpSlaveDockWidget))
dpSlaveDockWidget.setWidget(DeviceWidget(dpSlaveDockWidget, self.devicesManange))
dpSlaveDockWidget.setFeatures(QDockWidget.DockWidgetMovable | QDockWidget.DockWidgetFloatable) # type: ignore
paMasterDockWidget = QDockWidget('PA主站')
paMasterDockWidget.setWidget(DeviceWidget(paMasterDockWidget))
paMasterDockWidget.setWidget(DeviceWidget(paMasterDockWidget, self.devicesManange))
paMasterDockWidget.setFeatures(QDockWidget.DockWidgetMovable | QDockWidget.DockWidgetFloatable) # type: ignore
paSlaveDockWidget = QDockWidget('PA从站')
paSlaveDockWidget.setWidget(DeviceWidget(paSlaveDockWidget))
paSlaveDockWidget.setWidget(DeviceWidget(paSlaveDockWidget, self.devicesManange))
paSlaveDockWidget.setFeatures(QDockWidget.DockWidgetMovable | QDockWidget.DockWidgetFloatable) # type: ignore
self.addDockWidget(Qt.TopDockWidgetArea, dpMasterDockWidget) # type: ignore
@ -64,8 +66,26 @@ class MainWindow(QMainWindow):
self.showMaximized()
def startProtocol(self):
sender = self.sender
dockWidgets = self.findChildren(QDockWidget) #找到四个dockWidget窗口
for dockWidget in dockWidgets:
deviceTabWidgets = dockWidget.findChildren(QTabWidget, 'deviceTabWidget') #判断四个窗口里是否有deviceTabWidget
for deviceTabWidget in deviceTabWidgets:
areaTabWidgets = deviceTabWidget.findChildren(QTabWidget, 'areaTabWidget')
for areaTabWidget in areaTabWidgets:
leftLayout = areaTabWidget.currentWidget().layout().itemAt(0)
if isinstance(leftLayout,QGridLayout):
masterAndSlave = dockWidget.windowTitle()[2:5]
dataType = leftLayout.itemAtPosition(0,1).widget().currentText()
dataTypeAndModel = masterAndSlave + dataType
if dataTypeAndModel in ['主站AI', '主站DI', '从站AO', '从站DO']:
curIndex = areaTabWidget.currentIndex()
buttonlayoutWidget = areaTabWidget.currentWidget().layout().itemAt(2).itemAtPosition(0,0).widget()#获取buttonlayout
buttonlayoutWidget.readValues(deviceName = deviceName, curIndex = curIndex)
def loadProject(self):
pass

@ -47,8 +47,8 @@ class Device():
area.addressList = np.arange(area.startAddress, area.endAddress + 1, area.bytes).tolist()
self.indexDict[len(self.indexDict.values())] = len(self.outputAreas)
self.outputAreas.append(area)
# print(id(self), self.outputAreas)
# print(area.addressList, area.startAddress, area.endAddress, self.outputAreas)
# print(id(self), self.inputAreas)
# print(self.deviceName, area.addressList, area.startAddress, area.endAddress, self.inputAreas)
def delArea(self, index, type):
if type in ["DI", "AI"]:
@ -94,6 +94,7 @@ class Device():
return self.outputAreas[index].currentValue
else:
# print(self.inputAreas, index)
# print(id(self), self.inputAreas)
return self.inputAreas[index].currentValue
def getLength(self, nums, bytes):

@ -1,37 +0,0 @@
class Area():
mainLayout = None
leftLayoutWidget = []
rightLayoutWidget = []
class Device():
deviceName = None
areaTabWidget = None
dockWidget = None
class DeviceWidgetManage():
def addDevice(self,deviceName, areaTabWidget, dockWidget):
Device.deviceName = deviceName
Device.areaTabWidget = areaTabWidget
Device.dockWidget = dockWidget
def getDeviceName(self):
return Device.deviceName
def addArea(self, mainLayout=None, leftLayoutWidget=None, rightLayoutWidget=None):
if mainLayout is not None:
Area.mainLayout = mainLayout
if leftLayoutWidget is not None:
Area.leftLayoutWidget = leftLayoutWidget
if rightLayoutWidget is not None:
Area.rightLayoutWidget = rightLayoutWidget
def getAreaTabWidget(self):
return Device.areaTabWidget
Loading…
Cancel
Save