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/MainWindow.py

187 lines
6.0 KiB
Python

2 years ago
import sys
import json
import collections
import time
from PyQt5.QtWidgets import QApplication, QMainWindow, QToolBar, QMdiArea, QAction, QInputDialog, QDialog, QFormLayout, QLineEdit, \
QMdiSubWindow, QDialogButtonBox, QWidget, QComboBox, QTabBar, QTabWidget, QGridLayout, QLabel, QPushButton, QSpacerItem, QSizePolicy, QHBoxLayout, QTableWidget, QScrollArea
from PyQt5 import QtCore
2 years ago
from PyQt5.QtGui import QPixmap, QIcon
2 years ago
from UI.DeviceWidget import DeviceDialog
2 years ago
from UI.AreaSettingWidget import AreaSettingWidget
2 years ago
from UI.DelAreaWidget import DelAreaWidget
2 years ago
from model.ProjectModel.DeviceManage import DevicesManange, Device
2 years ago
from protocol.ModBus.ModBusThread import MyThread
from utils.DBModels.BaseModel import *
2 years ago
from UI.AreaTabWidget import AreaTabWidget
2 years ago
from utils.DBModels.DeviceModels import DeviceDB
from model.ClientModel.Client import Client
2 years ago
class CommonHelper:
def __init__(self):
pass
@staticmethod
def readQss(style):
with open(style,"r") as f:
return f.read()
2 years ago
class MainWindow(QMainWindow):
def __init__(self):
super().__init__()
2 years ago
self.subWindows = [] #存储设备widget
2 years ago
self.initUI()
2 years ago
self.initAreaWidget()
2 years ago
self.projectManage = DevicesManange()
2 years ago
2 years ago
def initUI(self):
self.toolbar = QToolBar()
self.addToolBar(self.toolbar)
# self.setWindowState(self.windowState() | QtCore.Qt.WindowMaximized)
2 years ago
self.addDiviceBtn = QAction("添加设备", self)
self.addDiviceBtn.setObjectName("addDiviceBtn")
self.addDiviceBtn.triggered.connect(self.createDeciveWidget)
2 years ago
2 years ago
self.startProtocolBtn = QAction("开始通讯", self)
self.startProtocolBtn.setObjectName("startProtocolBtn")
self.startProtocolBtn.triggered.connect(self.startProtocol)
2 years ago
self.loadProjectBtn = QAction('导入工程', self)
self.loadProjectBtn.setObjectName("loadProjectBtn")
self.loadProjectBtn.triggered.connect(self.loadProject)
2 years ago
self.toolbar.addAction(self.addDiviceBtn)
2 years ago
self.toolbar.addAction(self.loadProjectBtn)
2 years ago
self.toolbar.addAction(self.startProtocolBtn)
2 years ago
self.mdi_area = QMdiArea()
self.setCentralWidget(self.mdi_area)
2 years ago
self.setWindowIcon(QIcon('Static/zhjt.ico'))
2 years ago
2 years ago
self.setWindowTitle("PROFIBUS")
2 years ago
self.setGeometry(1000, 500, 800, 600)
def deviceWidget(self, windowTitle):
2 years ago
subWindow = AreaQMdiSubWindow(self)# 创建一个子窗口
subWindow.setObjectName('subWindow')
areaTabWidget = AreaTabWidget()
#新建mainWindows放入subwindows
areaMainWindow = QMainWindow()
areaMainWindow.setCentralWidget(areaTabWidget)
#mainwindows添加工具栏
toolbar = QToolBar()
areaMainWindow.addToolBar(toolbar)
addAreaBtn = QAction("添加通道", areaMainWindow)
addAreaBtn.setObjectName("addDiviceBtn")
addAreaBtn.triggered.connect(lambda: areaTabWidget.addAreaTab(windowTitle))
toolbar.addAction(addAreaBtn)
#为mainwindow添加右滑动条
2 years ago
scroll_widget = QScrollArea()
scroll_widget.setWidgetResizable(True)
2 years ago
scroll_widget.setWidget(areaMainWindow)
2 years ago
2 years ago
#设置subwindow
subWindow.setWindowTitle(windowTitle)
subWindow.setGeometry(0, 0, 600, 500)
subWindow.setWidget(scroll_widget)
subWindow.setWindowIcon(QIcon('Static/zhjt.ico'))
self.mdi_area.addSubWindow(subWindow) # 将子窗口添加到MDI区域
subWindow.show()
2 years ago
2 years ago
self.subWindows.append(subWindow)
return subWindow
2 years ago
2 years ago
def loadProject(self):
pass
2 years ago
2 years ago
def initAreaWidget(self):
2 years ago
alldevices = DevicesManange.getAllDevice()
2 years ago
for devices in alldevices:
areas = devices[3]
2 years ago
areaTabWidget = self.deviceWidget(devices[0]).widget().widget().centralWidget()
2 years ago
if areas is not None:
areas = json.loads(areas)
for area in areas:
2 years ago
dataType, order = self.tran(area["type"], area["order"])
2 years ago
channelBytes = area["bytes"]
2 years ago
print(dataType, type(dataType))
areaTabWidget.initAreaTab(dataType, order, channelBytes)
2 years ago
def createDeciveWidget(self):
dialog = DeviceDialog()
if dialog.exec_() == QDialog.Accepted:
deviceName, proType, masterSlaveModel, pvUpperLimit, pvLowerLimit, pvUnit = dialog.getParameters()
2 years ago
windowTitle = deviceName + ' ' + proType + masterSlaveModel + ' ' + pvLowerLimit + '-' + pvUpperLimit + pvUnit
2 years ago
DeviceDB().addDevice(deviceName = windowTitle, proType = proType, masterSlaveModel = masterSlaveModel, pvUpperLimit=pvUpperLimit, pvLowerLimit=pvLowerLimit, pvUnit=pvUnit)
2 years ago
else:
return
2 years ago
self.deviceWidget(windowTitle)
2 years ago
2 years ago
def writeValue(self):
2 years ago
for deviceNames in self.subWindows:
2 years ago
deviceName = deviceNames.windowTitle()
areas = [[1,2,3,4,5],[2,3,4,5]]
for area in areas:
pass
2 years ago
def startProtocol(self):
2 years ago
pass
2 years ago
2 years ago
def tran(self, dataType, order):
if dataType == 'AI':
dataType = 0
if dataType == 'AO':
dataType = 1
if dataType == 'DI':
dataType = 2
if dataType == 'DO':
dataType = 3
if order == 'ABCD':
order = 0
if order == 'DCBA':
order = 1
if order == 'CDAB':
order = 2
if order == 'BADC':
order = 3
return dataType, order
2 years ago
class AreaQMdiSubWindow(QMdiSubWindow):
2 years ago
def __init__(self, parentWindow):
2 years ago
super().__init__()
2 years ago
self.parentWindow = parentWindow
2 years ago
def closeEvent(self, event):
2 years ago
print(self.parentWindow.subWindows)
self.parentWindow.subWindows.remove(self)
print(self.parentWindow.subWindows)
2 years ago
DeviceDB.deleteDevice(deviceName = self.windowTitle())
2 years ago
2 years ago
2 years ago
2 years ago
if __name__ == '__main__':
app = QApplication(sys.argv)
2 years ago
Client.initDB()
2 years ago
window = MainWindow()
window.show()
sys.exit(app.exec_())