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