You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
PROFIBUS/UI/DeviceWidget.py

159 lines
6.8 KiB
Python

2 years ago
import json
from PyQt5.QtWidgets import QMainWindow, QDialog, QTabWidget, QPushButton, QSpacerItem, QSizePolicy,QMessageBox, QHBoxLayout, QWidget
from PyQt5.QtGui import QIcon
2 years ago
2 years ago
from UI.DeviceDialogWidget import DeviceDialog
from model.ProjectModel.DeviceManage import DevicesManange
from utils.DBModels.BaseModel import *
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):
super().__init__()
self.dockWidget = dockWidget
self.forceValues = []
self.initUI()
2 years ago
def initUI(self):
2 years ago
#获取DP、PA协议和主从模式
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')
self.horizontalSpacer = QSpacerItem(40, 20, QSizePolicy.Expanding, QSizePolicy.Minimum)
self.verticalSpacer = QSpacerItem(20, 40, QSizePolicy.Minimum, QSizePolicy.Expanding)
self.addDeviceButton = QPushButton('添加设备 ')
self.addDeviceButton.setObjectName('deviceAddButton')
self.addDeviceButton.setIcon(QIcon('Static/add.png'))
self.addDeviceButton.setFlat(True)
self.addDeviceButton.clicked.connect(self.addDeviceWidget)
self.deviceTabWidget.setCornerWidget(self.addDeviceButton)
self.deviceTabWidget.setTabsClosable(True)
self.deviceTabWidget.tabCloseRequested.connect(self.closeTab)
self.initWidget()
# 设置主窗口的中心部分为 QTabWidget
self.setCentralWidget(self.deviceTabWidget)
def closeTab(self, index):
reply = QMessageBox.question(self, 'Confirmation', '确定删掉此设备吗?',
QMessageBox.Yes | QMessageBox.No, QMessageBox.No)
if reply == QMessageBox.Yes:
if index != -1:
self.deviceTabWidget.removeTab(index)
DeviceDB.deleteDevice(deviceName = self.deviceName)
else:
return
if self.deviceTabWidget.count() == 0:
self.initWidget()
def addDeviceWidget(self,init = False,deviceName = None):
if deviceName is None:
dialog = DeviceDialog()
if dialog.exec_() == QDialog.Accepted:
self.titleName = dialog.getParameters()
self.deviceName = self.titleName + self.dockWidget.windowTitle()
DeviceDB().addDevice(deviceName = self.deviceName, proType = self.proType , masterSlaveModel = self.masterSlaveModel)
areaTabWidget = AreaTabWidget(self)
if init:
self.deviceTabWidget.removeTab(0)
tabIndex = self.deviceTabWidget.count()
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)
else:
return
else:
self.deviceTabWidget.removeTab(0)
self.deviceName = deviceName
self.titleName = self.deviceName[:-4]
areaTabWidget = AreaTabWidget(self)
self.deviceTabWidget.tabBar().setHidden(False)
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)
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.addDeviceWidget(deviceName=deviceName)
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()
2 years ago
else:
2 years ago
return