diff --git a/UI/Main/Main.py b/UI/Main/Main.py index 8b22a05..e9fb236 100644 --- a/UI/Main/Main.py +++ b/UI/Main/Main.py @@ -1,14 +1,14 @@ -from csv import excel + import sys import pandas as pd from PyQt5 import QtWidgets from PyQt5.QtCore import Qt from PyQt5.Qt import * -from PyQt5.QtWidgets import QApplication, QMainWindow, QStackedWidget, QMessageBox, QStackedWidget, QWidget, QTabWidget, QFileDialog, QPushButton, QGraphicsDropShadowEffect -from PyQt5.QtGui import QIcon +from PyQt5.QtWidgets import QApplication, QMainWindow, QStackedWidget, QMessageBox, QStackedWidget, QTabWidget, QFileDialog, QPushButton, QGraphicsDropShadowEffect + from PyQt5.QtCore import QSize -from PyQt5.QtGui import QPainter, QBrush, QColor -from PyQt5.QtCore import QEvent + + from ctypes import POINTER, cast from ctypes.wintypes import MSG from win32 import win32api, win32gui @@ -66,6 +66,7 @@ class MainWindow(QMainWindow): self.rightWidget.setMouseTracking(True) self.topWidget.setMouseTracking(True) + Globals.setValue('MainWindows', self) #设置全局变量 #初始化接口 # self.windowEffect = WindowEffect() # # 添加DWM阴影效果 @@ -85,18 +86,77 @@ class MainWindow(QMainWindow): self.leftWidget.setObjectName("leftWidget") self.projectWidget = ProjectWidgets() - self.userWidget = UserWidgets() - self.procedureManagerWidget = ProcedureManager() - self.controlWidget = getControlWidget() + + + + + self.rightWidget = QStackedWidget() + self.rightWidget.setObjectName("rightWidget") + self.rightWidget.addWidget(self.projectWidget) + + + + + #添加导入变量按钮 + self.importVarButton = QPushButton('导入变量') + self.importVarButton.setIcon(qtawesome.icon('fa5s.file-import', color = '#059669')) + self.importVarButton.setObjectName('importBtn') + self.importVarButton.setIconSize(QSize(22, 22)) + self.importVarButton.setFlat(True) + self.importVarButton.clicked.connect(self.loadVar) + + self.createWidgets() + + + self.setCentralWidget(self.centralwidget) + self.setWindowOpacity(0.995) # 设置窗口透明度 + self.topWidget = MainTop(self) + self.topWidget.setObjectName('topWidget') + + # 初始化搜索框状态(在topWidget创建后) + self.topWidget.updateSearchPlaceholder() + + self.verticalLayout = QtWidgets.QVBoxLayout(self.centralwidget) + self.horizontalLayout = QtWidgets.QHBoxLayout() + self.horizontalLayout.setObjectName("horizontalLayout") + self.verticalLayout.setObjectName("verticalLayout") + + self.horizontalLayout.addWidget(self.leftWidget) + self.horizontalLayout.addWidget(self.rightWidget) + self.horizontalLayout.setStretch(0, 1) + self.horizontalLayout.setStretch(1, 10) + self.horizontalLayout.setContentsMargins(0, 0, 0, 0) + self.horizontalLayout.setSpacing(1) + self.verticalLayout.setContentsMargins(0, 0, 0, 0) + self.verticalLayout.addWidget(self.topWidget) + self.verticalLayout.addLayout(self.horizontalLayout) + self.verticalLayout.setStretch(0, 1) + self.verticalLayout.setStretch(1, 18) + self.verticalLayout.setSpacing(0) + + # self.setAttribute(Qt.WA_TranslucentBackground) # 设置窗口背景透明 + self.setWindowFlag(Qt.FramelessWindowHint) + + # 添加阴影效果(接近Windows原生) + + # 添加圆角(QSS) + # self.centralwidget.setStyleSheet("") + def createWidgets(self): self.ModbusTcpMasterWidget = VarWidgets('ModbusTcpMaster') self.ModbusTcpSlaveWidget = VarWidgets('ModbusTcpSlave') self.ModbusRtuMasterWidget = VarWidgets('ModbusRtuMaster') self.ModbusRtuSlaveWidget = VarWidgets('ModbusRtuSlave') + self.userWidget = UserWidgets() + self.procedureManagerWidget = ProcedureManager() + self.controlWidget = getControlWidget() modbusWidgetList = [self.ModbusTcpMasterWidget, self.ModbusTcpSlaveWidget, self.ModbusRtuMasterWidget, self.ModbusRtuSlaveWidget] modbusNameList = ['MODBUSTCP主站', 'MODBUSTCP从站', 'MODBUSRTU主站', 'MODBUSRTU从站',] + + + self.profibusWidget = ProfibusWidgets() self.trendWidget = TrendWidgets() self.SettingWidget = SettingWidget() @@ -117,14 +177,10 @@ class MainWindow(QMainWindow): self.varManageTabWidget = QTabWidget() self.varManageTabWidget.setObjectName("varManageTabWidget") self.varManageTabWidget.tabBar().setObjectName('varManageTabBar') - - self.rightWidget = QStackedWidget() - self.rightWidget.setObjectName("rightWidget") - self.rightWidget.addWidget(self.projectWidget) for widget, name in zip(modbusWidgetList, modbusNameList): widget.setObjectName('varWidget') self.varManageTabWidget.addTab(widget, name) - + self.varManageTabWidget.addTab(self.analogWidget,'IO') self.varManageTabWidget.addTab(self.tcrtdWidget,'TCRTD') self.varManageTabWidget.addTab(self.hartWidget,'HART读取') @@ -132,13 +188,6 @@ class MainWindow(QMainWindow): self.varManageTabWidget.addTab(self.profibusWidget,'PROFIBUS') self.varManageTabWidget.addTab(self.rpcVarTableWidget, '远程通讯') - #添加导入变量按钮 - self.importVarButton = QPushButton('导入变量') - self.importVarButton.setIcon(qtawesome.icon('fa5s.file-import', color = '#059669')) - self.importVarButton.setObjectName('importBtn') - self.importVarButton.setIconSize(QSize(22, 22)) - self.importVarButton.setFlat(True) - self.importVarButton.clicked.connect(self.loadVar) self.varManageTabWidget.setCornerWidget(self.importVarButton) @@ -159,45 +208,19 @@ class MainWindow(QMainWindow): self.leftWidget.procedureMag.clicked.connect(lambda: self.initProcedureDB()) self.leftWidget.controlMag.clicked.connect(lambda: self.showControlSystem()) - self.setCentralWidget(self.centralwidget) - self.setWindowOpacity(0.995) # 设置窗口透明度 - - self.topWidget = MainTop(self) - self.topWidget.setObjectName('topWidget') - # 初始化搜索框状态(在topWidget创建后) - self.topWidget.updateSearchPlaceholder() - - self.verticalLayout = QtWidgets.QVBoxLayout(self.centralwidget) - self.horizontalLayout = QtWidgets.QHBoxLayout() - self.horizontalLayout.setObjectName("horizontalLayout") - self.verticalLayout.setObjectName("verticalLayout") - - self.horizontalLayout.addWidget(self.leftWidget) - self.horizontalLayout.addWidget(self.rightWidget) - self.horizontalLayout.setStretch(0, 1) - self.horizontalLayout.setStretch(1, 10) - self.horizontalLayout.setContentsMargins(0, 0, 0, 0) - self.horizontalLayout.setSpacing(1) - self.verticalLayout.setContentsMargins(0, 0, 0, 0) - self.verticalLayout.addWidget(self.topWidget) - self.verticalLayout.addLayout(self.horizontalLayout) - self.verticalLayout.setStretch(0, 1) - self.verticalLayout.setStretch(1, 18) - self.verticalLayout.setSpacing(0) - - # self.setAttribute(Qt.WA_TranslucentBackground) # 设置窗口背景透明 - self.setWindowFlag(Qt.FramelessWindowHint) - - # 添加阴影效果(接近Windows原生) - - # 添加圆角(QSS) - # self.centralwidget.setStyleSheet("") + def delecteWidget(self): + for i in reversed(range(1, self.rightWidget.count())): + widget = self.rightWidget.widget(i) + if widget: + self.rightWidget.removeWidget(widget) + widget.deleteLater() def exButtonClicked(self, index): + print(Globals.getValue('currentPro')) if Globals.getValue('currentPro') == -1 and index not in [0, 3]: return -1 - print(index, Globals.getValue('currentPro')) + self.rightWidget.setCurrentIndex(index) diff --git a/UI/ProjectManages/ProjectModel.py b/UI/ProjectManages/ProjectModel.py index 6273858..7933a3e 100644 --- a/UI/ProjectManages/ProjectModel.py +++ b/UI/ProjectManages/ProjectModel.py @@ -1,13 +1,15 @@ + import typing import qtawesome from PyQt5 import QtGui,QtCore,QtWidgets from PyQt5.QtCore import QAbstractTableModel, QModelIndex, Qt, QVariant, QSize -from PyQt5.QtWidgets import QItemDelegate, QHBoxLayout, QWidget,QMessageBox, QComboBox +from PyQt5.QtWidgets import QItemDelegate, QHBoxLayout, QWidget,QMessageBox from model.ProjectModel.ProjectManage import ProjectManage from ..LoginWidgets.LoginWidget import LoginWidget from utils import Globals + class QPushButton(QtWidgets.QPushButton): def __init__(self, *__args: any,clicked = None): super(QPushButton,self).__init__(*__args) @@ -255,13 +257,22 @@ class ProjectButtonDelegate(QItemDelegate): progress.show() QtWidgets.QApplication.processEvents() ProjectManage.switchProject(str(self.parent().model.datas[sender.index[0]][1])) + + if not Globals.getValue('switchState'): + pass + else: + Globals.getValue('MainWindows').delecteWidget() + Globals.getValue('MainWindows').createWidgets() + modelLists = ['ModbusTcpMasterTable', 'ModbusTcpSlaveTable', 'ModbusRtuMasterTable', \ - 'ModbusRtuSlaveTable', 'HartTable', 'TcRtdTable', 'AnalogTable', 'HartSimulateTable', 'userTable'] + 'ModbusRtuSlaveTable', 'HartTable', 'TcRtdTable', 'AnalogTable', 'HartSimulateTable', 'userTable'] for l in modelLists: # print(l) Globals.getValue(l).model.initTable() QtWidgets.QApplication.processEvents() + Globals.clearValue('forceVars')#清除颜色 + profibusTabWidgets = ['DP主站', 'DP从站', 'PA主站', 'PA从站'] for widget in profibusTabWidgets: Globals.getValue(widget).switchProject() @@ -274,6 +285,8 @@ class ProjectButtonDelegate(QItemDelegate): self.loginWidget = LoginWidget() self.loginWidget.show() + Globals.setValue('switchState', True)#用来判断是否是第一次切换 + def edit_action(self): sender = self.sender() diff --git a/UI/VarManages/ModbusModel.py b/UI/VarManages/ModbusModel.py index 6d76579..012e369 100644 --- a/UI/VarManages/ModbusModel.py +++ b/UI/VarManages/ModbusModel.py @@ -1,16 +1,15 @@ -from ast import Mod -from math import comb + import typing import sys -from numpy import var + import qtawesome from PyQt5 import QtGui,QtCore,QtWidgets from PyQt5.QtCore import QAbstractTableModel, QModelIndex, Qt, QVariant, QSize -from PyQt5.QtWidgets import QItemDelegate, QHBoxLayout, QWidget, QMessageBox, QComboBox, QStyleOptionViewItem +from PyQt5.QtWidgets import QItemDelegate, QHBoxLayout, QWidget, QMessageBox, QComboBox from UI.VarManages.BaseButtonDelegate import BaseButtonDelegate -from sympy import N + # 移除 Celery 相关导入,现在使用 ProtocolManage 和 ModbusManager @@ -64,7 +63,7 @@ class VarTableModel(QAbstractTableModel): self.checkList = ['Unchecked'] * len(self.datas) # self.layoutChanged.emit() self.table.proxy.invalidate() - self.refreshComboBox() + # self.refreshComboBox() def append_data(self, x): diff --git a/UI/VarManages/VarWidget.py b/UI/VarManages/VarWidget.py index ac38ffc..dad8ef5 100644 --- a/UI/VarManages/VarWidget.py +++ b/UI/VarManages/VarWidget.py @@ -1,14 +1,13 @@ from PyQt5 import QtCore, QtWidgets from PyQt5.QtCore import QSize, Qt, QTimer from PyQt5.QtGui import QIcon -from PyQt5.QtWidgets import QSplitter, QPushButton, QFileDialog, QMessageBox, QVBoxLayout +from PyQt5.QtWidgets import QSplitter, QPushButton, QFileDialog, QMessageBox import qtawesome as qta from UI.VarManages.VarTable import VarTableView, HartTableView, TcRtdTableView, AnalogTableView, \ - HartSimulateTableView, RpcVarTableView + HartSimulateTableView from UI.VarManages.MessageWidget import MessageWidget -from model.ProjectModel.ProjectManage import ProjectManage from model.ProjectModel.VarManage import ModbusVarManage from utils import Globals # 移除 Celery 相关导入,现在使用 ProtocolManage 和 ModbusManager diff --git a/model/ProjectModel/VarManage.py b/model/ProjectModel/VarManage.py index 3112c4a..d95513d 100644 --- a/model/ProjectModel/VarManage.py +++ b/model/ProjectModel/VarManage.py @@ -315,7 +315,6 @@ class HartVarManage(object): @classmethod def editVarModel(self, name, varModel): name = str(name) - print('修改变量模型',name) HartVar.update(varModel = str(varModel)).where(HartVar.varName == name).execute() # 操作后刷新缓存 refreshCache()