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 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 class DeviceWidget(QTabWidget): def __init__(self, dockWidget, devicesManange): super().__init__() self.dockWidget = dockWidget self.devicesManange = devicesManange self.setObjectName('deviceWidget') self.initUI() def initUI(self): #获取DP、PA协议和主从模式 self.dataTypeAndModel = self.dockWidget.windowTitle() self.proType = self.dataTypeAndModel[0:2] self.masterSlaveModel = self.dataTypeAndModel[2:4] self.setObjectName('deviceTabWidget') 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.setCornerWidget(self.addDeviceButton) self.setTabsClosable(True) self.tabCloseRequested.connect(self.closeTab) self.state = True self.initWidget() def closeTab(self, index): reply = QMessageBox.question(self, 'Confirmation', '确定删掉此设备吗?', QMessageBox.Yes | QMessageBox.No, QMessageBox.No) if reply == QMessageBox.Yes: if index != -1: deviceName = self.tabText(index) + self.dockWidget.windowTitle() # print(deviceName,index,222) self.removeTab(index) self.devicesManange.delDevice(deviceName = deviceName ) DeviceDB.deleteDevice(deviceName = deviceName) else: return if self.count() == 0: self.creatInitWidget() def addDeviceWidget(self,init = False,deviceName = None): if deviceName is None: dialog = DeviceDialog(self.dataTypeAndModel) if dialog.exec_() == QDialog.Accepted: self.titleName, pvUpperLimit, pvLowerLimit, pvUnit = dialog.getParameters() self.deviceName = self.titleName + self.dataTypeAndModel DeviceDB().addDevice(deviceName = self.deviceName, proType = self.proType , masterSlaveModel = self.masterSlaveModel, pvUpperLimit=pvUpperLimit, pvLowerLimit=pvLowerLimit, pvUnit=pvUnit) areaTabWidget = AreaTabWidget(self) if init: self.removeTab(0) tabIndex = self.count() self.tabBar().setHidden(False) self.addTab(areaTabWidget,str(self.titleName)) self.setCurrentIndex(tabIndex) self.devicesManange.addDevice(proType=self.proType, masterSlaveModel = self.masterSlaveModel, deviceName = self.deviceName) else: return else: self.deviceName = deviceName self.titleName = self.deviceName[:-4] areaTabWidget = AreaTabWidget(self) self.tabBar().setHidden(False) self.addTab(areaTabWidget,str(self.titleName)) def initWidget(self): alldevices = DevicesManange.getAllDevice() titleName = self.dockWidget.windowTitle() if alldevices: for devices in alldevices: deviceName = devices[0] if titleName in deviceName: # print(devices,333) self.devicesManange.addDevice(proType = devices[1], masterSlaveModel = devices[2], deviceName = devices[0]) self.addDeviceWidget(deviceName=deviceName) self.state = False if self.state: self.creatInitWidget() def creatInitWidget(self): widget = QWidget() widget.setObjectName('initWidget') 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.addWidget(QWidget()) layout.addWidget(addButton) layout.addWidget(QWidget()) widget.setLayout(layout) self.addTab(widget,'') self.tabBar().setHidden(True)