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

163 lines
6.9 KiB
Python

import json
from PyQt5.QtWidgets import QMainWindow, QDialog, QTabWidget, QPushButton, QSpacerItem, QSizePolicy,QMessageBox, QHBoxLayout, QWidget
from PyQt5.QtGui import QIcon
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()
def initUI(self):
#获取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(True)
# 设置主窗口的中心部分为 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(True)
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.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,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.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