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

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 = []
2 years ago
2 years ago
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)
2 years ago
self.initWidget(True)
2 years ago
# 设置主窗口的中心部分为 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:
2 years ago
self.initWidget(True)
2 years ago
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:
2 years ago
2 years ago
self.deviceName = deviceName
self.titleName = self.deviceName[:-4]
areaTabWidget = AreaTabWidget(self)
self.deviceTabWidget.tabBar().setHidden(False)
self.deviceTabWidget.addTab(areaTabWidget,str(self.titleName))
2 years ago
def initWidget(self,state):
2 years ago
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:
2 years ago
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)
2 years ago
2 years ago
# def initAreaWidget(self, mdiarea):
# alldevices = DevicesManange.getAllDevice()
# for devices in alldevices:
# areas = devices[3]
2 years ago
2 years ago
# 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
2 years ago
2 years ago
# 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()
2 years ago
2 years ago
# 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
2 years ago