修复切换工程后combox值不刷新及报错bug,修复切换工程后强制颜色不清楚bug

main
ZHANGXUXU\95193 3 months ago
parent f9b9ae6403
commit da7c6de0b9

@ -1,14 +1,14 @@
from csv import excel
import sys import sys
import pandas as pd import pandas as pd
from PyQt5 import QtWidgets from PyQt5 import QtWidgets
from PyQt5.QtCore import Qt from PyQt5.QtCore import Qt
from PyQt5.Qt import * from PyQt5.Qt import *
from PyQt5.QtWidgets import QApplication, QMainWindow, QStackedWidget, QMessageBox, QStackedWidget, QWidget, QTabWidget, QFileDialog, QPushButton, QGraphicsDropShadowEffect from PyQt5.QtWidgets import QApplication, QMainWindow, QStackedWidget, QMessageBox, QStackedWidget, QTabWidget, QFileDialog, QPushButton, QGraphicsDropShadowEffect
from PyQt5.QtGui import QIcon
from PyQt5.QtCore import QSize from PyQt5.QtCore import QSize
from PyQt5.QtGui import QPainter, QBrush, QColor
from PyQt5.QtCore import QEvent
from ctypes import POINTER, cast from ctypes import POINTER, cast
from ctypes.wintypes import MSG from ctypes.wintypes import MSG
from win32 import win32api, win32gui from win32 import win32api, win32gui
@ -66,6 +66,7 @@ class MainWindow(QMainWindow):
self.rightWidget.setMouseTracking(True) self.rightWidget.setMouseTracking(True)
self.topWidget.setMouseTracking(True) self.topWidget.setMouseTracking(True)
Globals.setValue('MainWindows', self) #设置全局变量
#初始化接口 #初始化接口
# self.windowEffect = WindowEffect() # self.windowEffect = WindowEffect()
# # 添加DWM阴影效果 # # 添加DWM阴影效果
@ -85,18 +86,77 @@ class MainWindow(QMainWindow):
self.leftWidget.setObjectName("leftWidget") self.leftWidget.setObjectName("leftWidget")
self.projectWidget = ProjectWidgets() 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.ModbusTcpMasterWidget = VarWidgets('ModbusTcpMaster')
self.ModbusTcpSlaveWidget = VarWidgets('ModbusTcpSlave') self.ModbusTcpSlaveWidget = VarWidgets('ModbusTcpSlave')
self.ModbusRtuMasterWidget = VarWidgets('ModbusRtuMaster') self.ModbusRtuMasterWidget = VarWidgets('ModbusRtuMaster')
self.ModbusRtuSlaveWidget = VarWidgets('ModbusRtuSlave') self.ModbusRtuSlaveWidget = VarWidgets('ModbusRtuSlave')
self.userWidget = UserWidgets()
self.procedureManagerWidget = ProcedureManager()
self.controlWidget = getControlWidget()
modbusWidgetList = [self.ModbusTcpMasterWidget, self.ModbusTcpSlaveWidget, self.ModbusRtuMasterWidget, self.ModbusRtuSlaveWidget] modbusWidgetList = [self.ModbusTcpMasterWidget, self.ModbusTcpSlaveWidget, self.ModbusRtuMasterWidget, self.ModbusRtuSlaveWidget]
modbusNameList = ['MODBUSTCP主站', 'MODBUSTCP从站', 'MODBUSRTU主站', 'MODBUSRTU从站',] modbusNameList = ['MODBUSTCP主站', 'MODBUSTCP从站', 'MODBUSRTU主站', 'MODBUSRTU从站',]
self.profibusWidget = ProfibusWidgets() self.profibusWidget = ProfibusWidgets()
self.trendWidget = TrendWidgets() self.trendWidget = TrendWidgets()
self.SettingWidget = SettingWidget() self.SettingWidget = SettingWidget()
@ -117,10 +177,6 @@ class MainWindow(QMainWindow):
self.varManageTabWidget = QTabWidget() self.varManageTabWidget = QTabWidget()
self.varManageTabWidget.setObjectName("varManageTabWidget") self.varManageTabWidget.setObjectName("varManageTabWidget")
self.varManageTabWidget.tabBar().setObjectName('varManageTabBar') self.varManageTabWidget.tabBar().setObjectName('varManageTabBar')
self.rightWidget = QStackedWidget()
self.rightWidget.setObjectName("rightWidget")
self.rightWidget.addWidget(self.projectWidget)
for widget, name in zip(modbusWidgetList, modbusNameList): for widget, name in zip(modbusWidgetList, modbusNameList):
widget.setObjectName('varWidget') widget.setObjectName('varWidget')
self.varManageTabWidget.addTab(widget, name) self.varManageTabWidget.addTab(widget, name)
@ -132,13 +188,6 @@ class MainWindow(QMainWindow):
self.varManageTabWidget.addTab(self.profibusWidget,'PROFIBUS') self.varManageTabWidget.addTab(self.profibusWidget,'PROFIBUS')
self.varManageTabWidget.addTab(self.rpcVarTableWidget, '远程通讯') 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) self.varManageTabWidget.setCornerWidget(self.importVarButton)
@ -159,45 +208,19 @@ class MainWindow(QMainWindow):
self.leftWidget.procedureMag.clicked.connect(lambda: self.initProcedureDB()) self.leftWidget.procedureMag.clicked.connect(lambda: self.initProcedureDB())
self.leftWidget.controlMag.clicked.connect(lambda: self.showControlSystem()) 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原生 def delecteWidget(self):
for i in reversed(range(1, self.rightWidget.count())):
# 添加圆角QSS widget = self.rightWidget.widget(i)
# self.centralwidget.setStyleSheet("") if widget:
self.rightWidget.removeWidget(widget)
widget.deleteLater()
def exButtonClicked(self, index): def exButtonClicked(self, index):
print(Globals.getValue('currentPro'))
if Globals.getValue('currentPro') == -1 and index not in [0, 3]: if Globals.getValue('currentPro') == -1 and index not in [0, 3]:
return -1 return -1
print(index, Globals.getValue('currentPro'))
self.rightWidget.setCurrentIndex(index) self.rightWidget.setCurrentIndex(index)

@ -1,13 +1,15 @@
import typing import typing
import qtawesome import qtawesome
from PyQt5 import QtGui,QtCore,QtWidgets from PyQt5 import QtGui,QtCore,QtWidgets
from PyQt5.QtCore import QAbstractTableModel, QModelIndex, Qt, QVariant, QSize 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 model.ProjectModel.ProjectManage import ProjectManage
from ..LoginWidgets.LoginWidget import LoginWidget from ..LoginWidgets.LoginWidget import LoginWidget
from utils import Globals from utils import Globals
class QPushButton(QtWidgets.QPushButton): class QPushButton(QtWidgets.QPushButton):
def __init__(self, *__args: any,clicked = None): def __init__(self, *__args: any,clicked = None):
super(QPushButton,self).__init__(*__args) super(QPushButton,self).__init__(*__args)
@ -255,6 +257,13 @@ class ProjectButtonDelegate(QItemDelegate):
progress.show() progress.show()
QtWidgets.QApplication.processEvents() QtWidgets.QApplication.processEvents()
ProjectManage.switchProject(str(self.parent().model.datas[sender.index[0]][1])) 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', \ modelLists = ['ModbusTcpMasterTable', 'ModbusTcpSlaveTable', 'ModbusRtuMasterTable', \
'ModbusRtuSlaveTable', 'HartTable', 'TcRtdTable', 'AnalogTable', 'HartSimulateTable', 'userTable'] 'ModbusRtuSlaveTable', 'HartTable', 'TcRtdTable', 'AnalogTable', 'HartSimulateTable', 'userTable']
for l in modelLists: for l in modelLists:
@ -262,6 +271,8 @@ class ProjectButtonDelegate(QItemDelegate):
Globals.getValue(l).model.initTable() Globals.getValue(l).model.initTable()
QtWidgets.QApplication.processEvents() QtWidgets.QApplication.processEvents()
Globals.clearValue('forceVars')#清除颜色
profibusTabWidgets = ['DP主站', 'DP从站', 'PA主站', 'PA从站'] profibusTabWidgets = ['DP主站', 'DP从站', 'PA主站', 'PA从站']
for widget in profibusTabWidgets: for widget in profibusTabWidgets:
Globals.getValue(widget).switchProject() Globals.getValue(widget).switchProject()
@ -274,6 +285,8 @@ class ProjectButtonDelegate(QItemDelegate):
self.loginWidget = LoginWidget() self.loginWidget = LoginWidget()
self.loginWidget.show() self.loginWidget.show()
Globals.setValue('switchState', True)#用来判断是否是第一次切换
def edit_action(self): def edit_action(self):
sender = self.sender() sender = self.sender()

@ -1,16 +1,15 @@
from ast import Mod
from math import comb
import typing import typing
import sys import sys
from numpy import var
import qtawesome import qtawesome
from PyQt5 import QtGui,QtCore,QtWidgets from PyQt5 import QtGui,QtCore,QtWidgets
from PyQt5.QtCore import QAbstractTableModel, QModelIndex, Qt, QVariant, QSize 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 UI.VarManages.BaseButtonDelegate import BaseButtonDelegate
from sympy import N
# 移除 Celery 相关导入,现在使用 ProtocolManage 和 ModbusManager # 移除 Celery 相关导入,现在使用 ProtocolManage 和 ModbusManager
@ -64,7 +63,7 @@ class VarTableModel(QAbstractTableModel):
self.checkList = ['Unchecked'] * len(self.datas) self.checkList = ['Unchecked'] * len(self.datas)
# self.layoutChanged.emit() # self.layoutChanged.emit()
self.table.proxy.invalidate() self.table.proxy.invalidate()
self.refreshComboBox() # self.refreshComboBox()
def append_data(self, x): def append_data(self, x):

@ -1,14 +1,13 @@
from PyQt5 import QtCore, QtWidgets from PyQt5 import QtCore, QtWidgets
from PyQt5.QtCore import QSize, Qt, QTimer from PyQt5.QtCore import QSize, Qt, QTimer
from PyQt5.QtGui import QIcon 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 import qtawesome as qta
from UI.VarManages.VarTable import VarTableView, HartTableView, TcRtdTableView, AnalogTableView, \ from UI.VarManages.VarTable import VarTableView, HartTableView, TcRtdTableView, AnalogTableView, \
HartSimulateTableView, RpcVarTableView HartSimulateTableView
from UI.VarManages.MessageWidget import MessageWidget from UI.VarManages.MessageWidget import MessageWidget
from model.ProjectModel.ProjectManage import ProjectManage
from model.ProjectModel.VarManage import ModbusVarManage from model.ProjectModel.VarManage import ModbusVarManage
from utils import Globals from utils import Globals
# 移除 Celery 相关导入,现在使用 ProtocolManage 和 ModbusManager # 移除 Celery 相关导入,现在使用 ProtocolManage 和 ModbusManager

@ -315,7 +315,6 @@ class HartVarManage(object):
@classmethod @classmethod
def editVarModel(self, name, varModel): def editVarModel(self, name, varModel):
name = str(name) name = str(name)
print('修改变量模型',name)
HartVar.update(varModel = str(varModel)).where(HartVar.varName == name).execute() HartVar.update(varModel = str(varModel)).where(HartVar.varName == name).execute()
# 操作后刷新缓存 # 操作后刷新缓存
refreshCache() refreshCache()

Loading…
Cancel
Save