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(QMainWindow): def __init__(self, dockWidget, devicesManange): super().__init__() self.dockWidget = dockWidget self.forceValues = [] self.devicesManange = devicesManange self.initUI() def initUI(self): #获取DP、PA协议和主从模式 self.proType = self.dockWidget.windowTitle()[0:2] self.masterSlaveModel = self.dockWidget.windowTitle()[2:4] 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.state = True 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) self.devicesManange.delDevice(deviceName = self.deviceName) DeviceDB.deleteDevice(deviceName = self.deviceName) else: return if self.deviceTabWidget.count() == 0: self.creatInitWidget() def addDeviceWidget(self,init = False,deviceName = None): if deviceName is None: dialog = DeviceDialog() if dialog.exec_() == QDialog.Accepted: self.titleName, pvUpperLimit, pvLowerLimit, pvUnit = 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.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.deviceTabWidget.tabBar().setHidden(False) self.deviceTabWidget.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.addItem(self.horizontalSpacer) layout.addWidget(addButton) layout.addItem(self.horizontalSpacer) widget.setLayout(layout) self.deviceTabWidget.addTab(widget,'') self.deviceTabWidget.tabBar().setHidden(True)