优化界面显示效果 修复部分bug

main
zcwBit 3 months ago
parent 83a0ada5f3
commit b5a6e7f6ba

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

@ -299,7 +299,7 @@ QPushButton#closeButton, QPushButton#minButton, QPushButton#startActionBtn{
}
QPushButton#confirmButton, QPushButton#exitButton{
QPushButton#confirmButton{
width: 54.75px;

@ -1,4 +0,0 @@
# 这是控制系统图标的占位符文件
# 请替换为实际的PNG图标文件
# 建议尺寸: 26x26 像素
# 颜色: 灰色调,与其他图标风格一致

@ -1,4 +0,0 @@
# 这是控制系统高亮图标的占位符文件
# 请替换为实际的PNG图标文件
# 建议尺寸: 26x26 像素
# 颜色: 蓝色调 (#2277EF),与其他高亮图标风格一致

@ -28,6 +28,7 @@ from utils.DBModels.InitParameterDB import InitParameterDB
from UI.ProfibusWidgets.ProfibusWindow import ProfibusWidgets
from UI.ProcedureManager.ProcedureManager import ProcedureManager
from UI.ControlManage.ControlWidget import getControlWidget
import qtawesome
class CommonHelper:
def __init__(self):
@ -132,7 +133,8 @@ class MainWindow(QMainWindow):
self.varManageTabWidget.addTab(self.rpcVarTableWidget, '远程通讯')
#添加导入变量按钮
self.importVarButton = QPushButton(QIcon('./Static/import.png'), '导入变量')
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)

@ -46,7 +46,7 @@ class MainTop(QtWidgets.QWidget):
self.closeBtn.setObjectName("closeBtn")
self.iconLabol.setPixmap(QPixmap('./Static/zhjt.png').scaled(50,50))
self.titleLabel.setText("信号发生装置")
self.titleLabel.setText("数字化临措平台")
self.closeBtn.clicked.connect(self.MainWindow.close)
self.minBtn.clicked.connect(self.MainWindow.showMinimized)

@ -85,7 +85,7 @@ class HistoryViewerWidget(QWidget):
def setupTableDisplay(self, table):
"""设置表格显示属性"""
table.setWordWrap(True)
table.setAlternatingRowColors(True)
table.setAlternatingRowColors(False)
table.setSortingEnabled(True)
header = table.horizontalHeader()

@ -221,7 +221,7 @@ class KeywordManagerWidget(QWidget):
header.setSectionResizeMode(4, QHeaderView.ResizeToContents) # 创建时间
# 设置交替行颜色
self.tableView.setAlternatingRowColors(True)
self.tableView.setAlternatingRowColors(False)
# 设置表格不可编辑
self.tableView.setEditTriggers(QTableView.NoEditTriggers)

@ -207,7 +207,7 @@ class ProcedureEditor(QWidget):
# 设置表格属性
self.stepsTable.setSelectionBehavior(QAbstractItemView.SelectRows)
self.stepsTable.setEditTriggers(QAbstractItemView.AllEditTriggers) # 允许所有方式编辑
self.stepsTable.setAlternatingRowColors(True)
self.stepsTable.setAlternatingRowColors(False)
# 设置列宽
header = self.stepsTable.horizontalHeader()

@ -194,7 +194,7 @@ class StepExecutor(QWidget):
self.tableView.setSelectionBehavior(QTableView.SelectRows)
# 设置表格显示优化
self.tableView.setAlternatingRowColors(True) # 交替行颜色
self.tableView.setAlternatingRowColors(False) # 交替行颜色
self.tableView.setShowGrid(True) # 显示网格线
self.tableView.setGridStyle(Qt.SolidLine) # 实线网格
self.tableView.setSortingEnabled(False) # 禁用排序避免干扰执行顺序

@ -258,6 +258,7 @@ class ProjectButtonDelegate(QItemDelegate):
modelLists = ['ModbusTcpMasterTable', 'ModbusTcpSlaveTable', 'ModbusRtuMasterTable', \
'ModbusRtuSlaveTable', 'HartTable', 'TcRtdTable', 'AnalogTable', 'HartSimulateTable', 'userTable']
for l in modelLists:
# print(l)
Globals.getValue(l).model.initTable()
QtWidgets.QApplication.processEvents()

@ -2,6 +2,7 @@ from PyQt5 import QtCore, QtWidgets
from PyQt5.QtCore import QSize, Qt
from PyQt5.QtGui import QIcon
from PyQt5.QtWidgets import QSplitter, QPushButton
import qtawesome as qta
from .ProjectTable import ProjectTableView
from model.ProjectModel.ProjectManage import ProjectManage
@ -11,22 +12,118 @@ class ProjectWidgets(QtWidgets.QWidget):
super(ProjectWidgets, self).__init__()
self.setAttribute(Qt.WA_StyledBackground, True)
self.setupUi()
def setupButtonIcon(self, button, icon_name, color):
"""设置按钮图标,支持不同状态的颜色变化"""
# 正常状态图标
normal_icon = qta.icon(icon_name, color=color)
# 悬停状态图标(稍微亮一些)
hover_color = self.lightenColor(color, 0.2)
hover_icon = qta.icon(icon_name, color=hover_color)
# 按下状态图标(稍微暗一些)
pressed_color = self.darkenColor(color, 0.2)
pressed_icon = qta.icon(icon_name, color=pressed_color)
# 设置图标
button.setIcon(normal_icon)
# 存储不同状态的图标,用于状态切换
button._normal_icon = normal_icon
button._hover_icon = hover_icon
button._pressed_icon = pressed_icon
# 连接事件
button.enterEvent = lambda event: self.onButtonEnter(button, event)
button.leaveEvent = lambda event: self.onButtonLeave(button, event)
button.mousePressEvent = lambda event: self.onButtonPress(button, event)
button.mouseReleaseEvent = lambda event: self.onButtonRelease(button, event)
def lightenColor(self, color, factor):
"""使颜色变亮"""
if color.startswith('#'):
# 十六进制颜色
r = int(color[1:3], 16)
g = int(color[3:5], 16)
b = int(color[5:7], 16)
r = min(255, int(r + (255 - r) * factor))
g = min(255, int(g + (255 - g) * factor))
b = min(255, int(b + (255 - b) * factor))
return f"#{r:02x}{g:02x}{b:02x}"
return color
def darkenColor(self, color, factor):
"""使颜色变暗"""
if color.startswith('#'):
# 十六进制颜色
r = int(color[1:3], 16)
g = int(color[3:5], 16)
b = int(color[5:7], 16)
r = max(0, int(r * (1 - factor)))
g = max(0, int(g * (1 - factor)))
b = max(0, int(b * (1 - factor)))
return f"#{r:02x}{g:02x}{b:02x}"
return color
def onButtonEnter(self, button, event):
"""按钮鼠标进入事件"""
if hasattr(button, '_hover_icon'):
button.setIcon(button._hover_icon)
# 调用原始的enterEvent
QPushButton.enterEvent(button, event)
def onButtonLeave(self, button, event):
"""按钮鼠标离开事件"""
if hasattr(button, '_normal_icon'):
button.setIcon(button._normal_icon)
# 调用原始的leaveEvent
QPushButton.leaveEvent(button, event)
def onButtonPress(self, button, event):
"""按钮鼠标按下事件"""
if hasattr(button, '_pressed_icon'):
button.setIcon(button._pressed_icon)
# 调用原始的mousePressEvent
QPushButton.mousePressEvent(button, event)
def onButtonRelease(self, button, event):
"""按钮鼠标释放事件"""
# 检查鼠标是否还在按钮上
if button.rect().contains(event.pos()):
if hasattr(button, '_hover_icon'):
button.setIcon(button._hover_icon)
else:
if hasattr(button, '_normal_icon'):
button.setIcon(button._normal_icon)
# 调用原始的mouseReleaseEvent
QPushButton.mouseReleaseEvent(button, event)
def setupUi(self):
self.createBtn = QPushButton(QIcon('./Static/add.png'), '新建工程')
# 新建工程按钮
self.createBtn = QPushButton('新建工程')
self.createBtn.setObjectName('createBtn')
self.createBtn.setIconSize(QSize(22, 22))
self.createBtn.setIconSize(QSize(18, 18))
self.createBtn.clicked.connect(self.createProject)
self.setupButtonIcon(self.createBtn, 'fa5s.plus', '#2277EF')
self.importBtn = QPushButton(QIcon('./Static/import.png'), '导入工程')
# 导入工程按钮
self.importBtn = QPushButton('导入工程')
self.importBtn.setObjectName('importBtn')
self.importBtn.setIconSize(QSize(22, 22))
self.importBtn.setIconSize(QSize(18, 18))
self.importBtn.clicked.connect(self.importProject)
self.setupButtonIcon(self.importBtn, 'fa5s.file-import', '#059669')
self.exportBtn = QPushButton(QIcon('./Static/export.png'), '导出工程')
# 导出工程按钮
self.exportBtn = QPushButton('导出工程')
self.exportBtn.setObjectName('exportBtn')
self.exportBtn.setIconSize(QSize(22, 22))
self.exportBtn.setIconSize(QSize(18, 18))
self.exportBtn.clicked.connect(self.exportPorject)
self.setupButtonIcon(self.exportBtn, 'fa5s.file-export', '#7C3AED')
self.projectView = ProjectTableView()
self.projectView.setObjectName('projectView')

@ -1,7 +1,7 @@
from PyQt5.QtCore import (QCoreApplication, Qt)
from PyQt5.QtWidgets import (QComboBox, QGridLayout, QLabel,
QLineEdit, QPushButton, QSizePolicy, QSpacerItem, QListView,
QWidget, QMessageBox, QListView)
from PyQt5.QtWidgets import (QComboBox, QVBoxLayout, QHBoxLayout, QLabel,
QLineEdit, QPushButton, QListView,
QWidget, QMessageBox)
from utils.DBModels.ProtocolModel import RTUSetting
@ -12,7 +12,6 @@ class CustomBox(QComboBox):
self.setCursor(Qt.PointingHandCursor)
self.setView(QListView())
def showPopup(self):
QComboBox.showPopup(self)
pop = self.children()[1]
@ -23,185 +22,187 @@ class RTUSettingWidget(QWidget):
def __init__(self, rtuType):
super(RTUSettingWidget, self).__init__()
self.rtuType = rtuType
self.gridLayout_2 = QGridLayout(self)
self.gridLayout_2.setObjectName("gridLayout_2")
self.gridLayout = QGridLayout()
self.gridLayout.setObjectName("gridLayout")
self.horizontalSpacer_3 = QSpacerItem(40, 20, QSizePolicy.Expanding, QSizePolicy.Minimum)
self.gridLayout.addItem(self.horizontalSpacer_3, 5, 0, 1, 2)
self.setObjectName("RTUSettingWidget")
self.setupUI()
def setupUI(self):
# 主布局 - 垂直布局
main_layout = QVBoxLayout(self)
main_layout.setContentsMargins(0, 0, 0, 0)
main_layout.setSpacing(7)
# 第一行:端口号和波特率
row1_layout = QHBoxLayout()
row1_layout.setSpacing(15)
# 端口号列
port_column = QVBoxLayout()
port_column.setSpacing(4)
self.label = QLabel('端口号')
self.label.setObjectName("setlabel")
self.portEdit = QLineEdit()
self.portEdit.setObjectName("setEdit")
port_column.addWidget(self.label)
port_column.addWidget(self.portEdit)
# 波特率列
baud_column = QVBoxLayout()
baud_column.setSpacing(4)
self.label_5 = QLabel('波特率')
self.label_5.setObjectName("setlabel")
self.baudrateEdit = QLineEdit()
self.baudrateEdit.setObjectName("setEdit")
baud_column.addWidget(self.label_5)
baud_column.addWidget(self.baudrateEdit)
row1_layout.addLayout(port_column)
row1_layout.addLayout(baud_column)
main_layout.addLayout(row1_layout)
# 第二行:字节长度和停止位
row2_layout = QHBoxLayout()
row2_layout.setSpacing(15)
# 字节长度列
byte_column = QVBoxLayout()
byte_column.setSpacing(4)
self.label_2 = QLabel('字节长度')
self.label_2.setObjectName("setlabel")
self.byteSizeBox = CustomBox()
self.byteSizeBox.addItem("8")
self.byteSizeBox.addItem("7")
self.byteSizeBox.setObjectName("setBox")
self.gridLayout.addWidget(self.byteSizeBox, 4, 1, 1, 1)
self.label = QLabel(self)
self.label.setObjectName("setlabel")
self.gridLayout.addWidget(self.label, 0, 0, 1, 1)
self.label_4 = QLabel(self)
byte_column.addWidget(self.label_2)
byte_column.addWidget(self.byteSizeBox)
# 停止位列
stop_column = QVBoxLayout()
stop_column.setSpacing(4)
self.label_4 = QLabel('停止位')
self.label_4.setObjectName("setlabel")
self.gridLayout.addWidget(self.label_4, 8, 0, 1, 1)
self.baudrateEdit = QLineEdit(self)
self.baudrateEdit.setObjectName("setEdit")
self.gridLayout.addWidget(self.baudrateEdit, 2, 1, 1, 1)
self.stopbitsBox = CustomBox()
self.stopbitsBox.addItem("1")
self.stopbitsBox.addItem("2")
self.stopbitsBox.setObjectName("setBox")
self.gridLayout.addWidget(self.stopbitsBox, 8, 1, 1, 1)
self.freEdit = QLineEdit(self)
self.freEdit.setObjectName("setEdit")
self.gridLayout.addWidget(self.freEdit, 10, 1, 1, 1)
self.horizontalSpacer = QSpacerItem(40, 20, QSizePolicy.Expanding, QSizePolicy.Minimum)
self.gridLayout.addItem(self.horizontalSpacer, 1, 0, 1, 2)
self.label_6 = QLabel(self)
self.label_6.setObjectName("setlabel")
self.gridLayout.addWidget(self.label_6, 10, 0, 1, 1)
self.label_3 = QLabel(self)
stop_column.addWidget(self.label_4)
stop_column.addWidget(self.stopbitsBox)
row2_layout.addLayout(byte_column)
row2_layout.addLayout(stop_column)
main_layout.addLayout(row2_layout)
# 第三行:奇偶校验(单独一行)
parity_layout = QVBoxLayout()
parity_layout.setSpacing(4)
self.label_3 = QLabel('奇偶校验')
self.label_3.setObjectName("setlabel")
self.gridLayout.addWidget(self.label_3, 6, 0, 1, 1)
self.label_5 = QLabel(self)
self.label_5.setObjectName("setlabel")
self.gridLayout.addWidget(self.label_5, 2, 0, 1, 1)
self.horizontalSpacer_4 = QSpacerItem(40, 20, QSizePolicy.Expanding, QSizePolicy.Minimum)
self.gridLayout.addItem(self.horizontalSpacer_4, 7, 0, 1, 2)
self.portEdit = QLineEdit(self)
self.portEdit.setObjectName("setEdit")
self.gridLayout.addWidget(self.portEdit, 0, 1, 1, 1)
self.label_2 = QLabel(self)
self.label_2.setObjectName("setlabel")
self.gridLayout.addWidget(self.label_2, 4, 0, 1, 1)
self.parityBox = CustomBox()
self.parityBox.addItem("N 无")
self.parityBox.addItem("O 奇")
self.parityBox.addItem("E 偶")
self.parityBox.setObjectName("setBox")
self.gridLayout.addWidget(self.parityBox, 6, 1, 1, 1)
self.horizontalSpacer_2 = QSpacerItem(40, 20, QSizePolicy.Expanding, QSizePolicy.Minimum)
self.gridLayout.addItem(self.horizontalSpacer_2, 3, 0, 1, 2)
self.horizontalSpacer_5 = QSpacerItem(40, 20, QSizePolicy.Expanding, QSizePolicy.Minimum)
self.gridLayout.addItem(self.horizontalSpacer_5, 9, 0, 1, 2)
parity_layout.addWidget(self.label_3)
parity_layout.addWidget(self.parityBox)
main_layout.addLayout(parity_layout)
# 第四行:通信频率和起始值
row4_layout = QHBoxLayout()
row4_layout.setSpacing(15)
# 通信频率列
freq_column = QVBoxLayout()
freq_column.setSpacing(4)
self.label_6 = QLabel('通信频率')
self.label_6.setObjectName("setlabel")
self.freEdit = QLineEdit()
self.freEdit.setObjectName("setEdit")
freq_column.addWidget(self.label_6)
freq_column.addWidget(self.freEdit)
# 起始值列
offset_column = QVBoxLayout()
offset_column.setSpacing(4)
self.label_7 = QLabel('起始值')
self.label_7.setObjectName('setlabel')
self.offsetBox = CustomBox()
self.offsetBox.addItem("1")
self.offsetBox.addItem("0")
self.offsetBox.setObjectName("setBox")
self.gridLayout.addItem(QSpacerItem(40, 20), 11, 0, 1, 2)
self.label_7 = QLabel('起始值')
self.label_7.setObjectName('setlabel')
self.gridLayout.addWidget(self.label_7, 12, 0, 1, 1)
self.gridLayout.addWidget(self.offsetBox, 12, 1, 1, 1)
self.gridLayout.addItem(QSpacerItem(40, 20), 13, 0, 1, 2)
self.gridLayout_2.addLayout(self.gridLayout, 3, 5, 2, 2)
self.verticalSpacer = QSpacerItem(20, 40, QSizePolicy.Minimum, QSizePolicy.Expanding)
self.gridLayout_2.addItem(self.verticalSpacer, 0, 1, 3, 12)
self.saveButton = QPushButton()
self.saveButton.setObjectName('setButton')
self.gridLayout.addWidget(self.saveButton, 15, 1, 1, 1)
self.horizontalSpacer_6 = QSpacerItem(40, 20, QSizePolicy.Expanding, QSizePolicy.Minimum)
self.gridLayout_2.addItem(self.horizontalSpacer_6, 7, 0, 3, 5)
self.horizontalSpacer_7 = QSpacerItem(40, 20, QSizePolicy.Expanding, QSizePolicy.Minimum)
self.gridLayout_2.addItem(self.horizontalSpacer_7, 7, 2, 3, 5)
self.verticalSpacer_2 = QSpacerItem(20, 40, QSizePolicy.Minimum, QSizePolicy.Expanding)
self.gridLayout_2.addItem(self.verticalSpacer_2, 7, 0, 3, 5)
self.label.setText(QCoreApplication.translate("self", u"\u7aef\u53e3\u53f7", None))
self.label_4.setText(QCoreApplication.translate("self", u"\u505c\u6b62\u4f4d", None))
self.label_6.setText(QCoreApplication.translate("self", u"\u901a\u4fe1\u9891\u7387", None))
self.label_3.setText(QCoreApplication.translate("self", u"\u5947\u5076\u6821\u9a8c", None))
self.label_5.setText(QCoreApplication.translate("self", u"\u6ce2\u7279\u7387", None))
self.label_2.setText(QCoreApplication.translate("self", u"\u5b57\u8282\u957f\u5ea6", None))
self.saveButton.setText(QCoreApplication.translate("self", u"\u4fdd\u5b58", None))
self.saveButton.clicked.connect(self.saveSetting)
# self.setupUi()
# retranslateUi
def setupUI(self):
offset_column.addWidget(self.label_7)
offset_column.addWidget(self.offsetBox)
row4_layout.addLayout(freq_column)
row4_layout.addLayout(offset_column)
main_layout.addLayout(row4_layout)
# 保存按钮
self.saveButton = QPushButton('保存')
if self.rtuType == 'master':
query = RTUSetting.get_by_id(1)
self.saveButton.setObjectName('rtuSaveButton')
else:
query = RTUSetting.get_by_id(2)
port = str(query.port)
byteSize = str(query.byteSize)
baudrate = str(query.baudrate)
stopbits = str(query.stopbits)
parity = str(query.parity)
frequency = str(query.frequency)
offset = str(query.offset)
self.portEdit.setText(port)
self.byteSizeBox.setCurrentText(byteSize)
self.baudrateEdit.setText(baudrate)
self.stopbitsBox.setCurrentText(stopbits)
self.freEdit.setText(frequency)
self.offsetBox.setCurrentText(offset)
self.parityBox.setCurrentText(parity)
self.saveButton.setObjectName('setButton')
self.saveButton.clicked.connect(self.saveSetting)
main_layout.addWidget(self.saveButton)
# 添加弹性空间
main_layout.addStretch()
def loadSettings(self):
"""加载设置数据"""
try:
if self.rtuType == 'master':
query = RTUSetting.get_by_id(1)
else:
query = RTUSetting.get_by_id(2)
port = str(query.port)
byteSize = str(query.byteSize)
baudrate = str(query.baudrate)
stopbits = str(query.stopbits)
parity = str(query.parity)
frequency = str(query.frequency)
offset = str(query.offset)
self.portEdit.setText(port)
self.byteSizeBox.setCurrentText(byteSize)
self.baudrateEdit.setText(baudrate)
self.stopbitsBox.setCurrentText(stopbits)
self.freEdit.setText(frequency)
self.offsetBox.setCurrentText(offset)
self.parityBox.setCurrentText(parity)
except Exception as e:
print(f"加载RTU设置失败: {e}")
# 设置默认值
self.portEdit.setText("COM1")
self.byteSizeBox.setCurrentText("8")
self.baudrateEdit.setText("9600")
self.stopbitsBox.setCurrentText("1")
self.freEdit.setText("1")
self.offsetBox.setCurrentText("1")
self.parityBox.setCurrentText("N 无")
def saveSetting(self):
port = self.portEdit.text()
byteSize = self.byteSizeBox.currentText()
baudrate = self.baudrateEdit.text()
stopbits = self.stopbitsBox.currentText()
parity = self.parityBox.currentText()
frequency = self.freEdit.text()
offset = self.offsetBox.currentText()
if self.rtuType == 'master':
RTUSetting.update(port = port, byteSize = byteSize, baudrate = baudrate, stopbits = stopbits, parity = parity, frequency = frequency, offset = offset).where(RTUSetting.tcpType == 'master').execute()
else:
RTUSetting.update(port = port, byteSize = byteSize, baudrate = baudrate, stopbits = stopbits, parity = parity, frequency = frequency, offset = offset).where(RTUSetting.tcpType == 'slave').execute()
QMessageBox.information(self, 'Sucess', '保存成功')
"""保存设置"""
try:
port = self.portEdit.text()
byteSize = self.byteSizeBox.currentText()
baudrate = self.baudrateEdit.text()
stopbits = self.stopbitsBox.currentText()
parity = self.parityBox.currentText()
frequency = self.freEdit.text()
offset = self.offsetBox.currentText()
if self.rtuType == 'master':
RTUSetting.update(port=port, byteSize=byteSize, baudrate=baudrate,
stopbits=stopbits, parity=parity, frequency=frequency,
offset=offset).where(RTUSetting.tcpType == 'master').execute()
else:
RTUSetting.update(port=port, byteSize=byteSize, baudrate=baudrate,
stopbits=stopbits, parity=parity, frequency=frequency,
offset=offset).where(RTUSetting.tcpType == 'slave').execute()
# 创建消息框
QMessageBox.information(self, '保存成功', f'RTU{self.rtuType}站配置已保存!')
except Exception as e:
QMessageBox.critical(self, '保存失败', f'保存RTU设置时发生错误{str(e)}')

@ -20,10 +20,10 @@ class SettingWidget(QWidget):
self.rtuSlaveSettingWidget = RTUSettingWidget('slave')
self.remoteConnectSettingWidget = RemoteConnectSettingWidget()
self.tcpMasterSettingWidget.setupUI()
self.tcpSlaveSettingWidget.setupUI()
self.rtuMasterSettingWidget.setupUI()
self.rtuSlaveSettingWidget.setupUI()
self.tcpMasterSettingWidget.loadSettings()
self.tcpSlaveSettingWidget.loadSettings()
self.rtuMasterSettingWidget.loadSettings()
self.rtuSlaveSettingWidget.loadSettings()
# 分组布局
self.tcpGroup = QGroupBox()
self.tcpLayout = QVBoxLayout()

@ -1,6 +1,6 @@
from PyQt5.QtCore import (QCoreApplication, Qt)
from PyQt5.QtWidgets import (QGridLayout, QLabel, QLineEdit,
QPushButton, QSizePolicy, QSpacerItem, QWidget, QComboBox, QMessageBox, QSplitter, QListView)
from PyQt5.QtWidgets import (QVBoxLayout, QLabel, QLineEdit,
QPushButton, QWidget, QComboBox, QMessageBox, QListView)
from utils.DBModels.ProtocolModel import TCPSetting
@ -10,7 +10,6 @@ class CustomBox(QComboBox):
self.setCursor(Qt.PointingHandCursor)
self.setView(QListView())
def showPopup(self):
super(CustomBox, self).showPopup()
pop = self.children()[1]
@ -18,134 +17,105 @@ class CustomBox(QComboBox):
class TCPSettingWidget(QWidget):
BORDER_WIDTH = 5
def __init__(self, tcpType):
super(TCPSettingWidget, self).__init__()
self.tcpType = tcpType
self.gridLayout_2 = QGridLayout(self)
self.gridLayout_2.setObjectName("gridLayout_2")
self.verticalSpacer = QSpacerItem(20, 40, QSizePolicy.Minimum, QSizePolicy.Expanding)
self.setObjectName("TCPSettingWidget")
self.setupUI()
self.gridLayout_2.addItem(self.verticalSpacer, 0, 1, 3, 12)
def setupUI(self):
# 主布局 - 垂直布局
main_layout = QVBoxLayout(self)
main_layout.setContentsMargins(0, 0, 0, 0)
main_layout.setSpacing(8)
self.gridLayout = QGridLayout()
self.gridLayout.setObjectName("gridLayout")
self.label = QLabel(self)
# IP地址
self.label = QLabel('IP地址')
self.label.setObjectName("setlabel")
self.label.setAlignment(Qt.AlignLeading|Qt.AlignLeft|Qt.AlignVCenter)
self.gridLayout.addWidget(self.label, 0, 0, 1, 1)
self.horizontalSpacer_3 = QSpacerItem(40, 20, QSizePolicy.Expanding, QSizePolicy.Minimum)
self.gridLayout.addItem(self.horizontalSpacer_3, 2, 0, 1, 4)
self.horizontalSpacer_4 = QSpacerItem(40, 20, QSizePolicy.Expanding, QSizePolicy.Minimum)
self.gridLayout.addItem(self.horizontalSpacer_4, 5, 0, 1, 4)
self.ipEdit = QLineEdit(self)
self.ipEdit = QLineEdit()
self.ipEdit.setObjectName("setEdit")
main_layout.addWidget(self.label)
main_layout.addWidget(self.ipEdit)
self.gridLayout.addWidget(self.ipEdit, 1, 0, 1, 3)
self.freEdit = QLineEdit(self)
self.freEdit.setObjectName("setEdit")
self.gridLayout.addWidget(self.freEdit, 7, 0, 1, 3)
self.portEdit = QLineEdit(self)
self.portEdit.setObjectName("setEdit")
self.gridLayout.addWidget(self.portEdit, 4, 0, 1, 3)
self.label_2 = QLabel(self)
# 端口号
self.label_2 = QLabel('端口号')
self.label_2.setObjectName("setlabel")
self.label_2.setAlignment(Qt.AlignLeading|Qt.AlignLeft|Qt.AlignVCenter)
self.gridLayout.addWidget(self.label_2, 3, 0, 1, 1)
self.portEdit = QLineEdit()
self.portEdit.setObjectName("setEdit")
main_layout.addWidget(self.label_2)
main_layout.addWidget(self.portEdit)
self.label_3 = QLabel(self)
# 通讯频率
self.label_3 = QLabel('通讯频率')
self.label_3.setObjectName("setlabel")
self.label_3.setAlignment(Qt.AlignLeading|Qt.AlignLeft|Qt.AlignVCenter)
self.gridLayout.addWidget(self.label_3, 6, 0, 1, 1)
self.horizontalSpacer_5 = QSpacerItem(40, 20, QSizePolicy.Expanding, QSizePolicy.Minimum)
self.gridLayout.addItem(self.horizontalSpacer_5, 8, 0, 1, 4)
self.freEdit = QLineEdit()
self.freEdit.setObjectName("setEdit")
main_layout.addWidget(self.label_3)
main_layout.addWidget(self.freEdit)
# 起始值
self.label_4 = QLabel('起始值')
self.label_4.setObjectName('setlabel')
self.offsetBox = CustomBox()
self.offsetBox.addItem("1")
self.offsetBox.addItem("0")
self.offsetBox.setObjectName("setBox")
main_layout.addWidget(self.label_4)
main_layout.addWidget(self.offsetBox)
#self.gridLayout.addWidget(QLabel('起始值'), 6, 0, 1, 1)
self.label_4 = QLabel('起始值')
self.label_4.setObjectName('setlabel')
self.gridLayout.addWidget(self.label_4,9, 0, 1, 2)
self.gridLayout.addWidget(self.offsetBox, 10, 0, 1, 3)
self.gridLayout.addItem(QSpacerItem(40, 20), 11, 0, 1, 4)
self.gridLayout_2.addLayout(self.gridLayout, 3, 5, 2, 2)
self.horizontalSpacer = QSpacerItem(40, 20, QSizePolicy.Expanding, QSizePolicy.Minimum)
self.gridLayout_2.addItem(self.horizontalSpacer, 7, 0, 3, 5)
self.verticalSpacer_2 = QSpacerItem(20, 40, QSizePolicy.Minimum, QSizePolicy.Expanding)
self.gridLayout_2.addItem(self.verticalSpacer_2, 7, 0, 3, 5)
self.saveButton = QPushButton(self)
self.saveButton.setObjectName("setButton")
#self.gridLayout.addWidget(QSplitter(), 11, 0, 1, 5)
self.gridLayout.addWidget(self.saveButton, 12, 0, 1, 3)
self.horizontalSpacer_2 = QSpacerItem(40, 20, QSizePolicy.Expanding, QSizePolicy.Minimum)
self.gridLayout_2.addItem(self.horizontalSpacer_2, 9, 2, 3, 5)
self.label.setText('IP地址')
self.label_2.setText(QCoreApplication.translate("self", u"\u7aef\u53e3\u53f7", None))
self.label_3.setText(QCoreApplication.translate("self", u"\u901a\u8baf\u9891\u7387", None))
self.saveButton.setText(QCoreApplication.translate("self", u"\u4fdd\u5b58", None))
self.saveButton.clicked.connect(self.saveSetting)
def setupUI(self):
# host = CharField()
# port = IntegerField()
# frequency = CharField()
# 保存按钮
self.saveButton = QPushButton('保存')
if self.tcpType == 'master':
query = TCPSetting.get_by_id(1)
self.saveButton.setObjectName("tcpSaveButton")
else:
query = TCPSetting.get_by_id(2)
port = str(query.port)
host = str(query.host)
frequency = str(query.frequency)
offset = str(query.offset)
self.ipEdit.setText(host)
self.portEdit.setText(port)
self.freEdit.setText(frequency)
self.offsetBox.setCurrentText(offset)
self.saveButton.setObjectName("setButton")
self.saveButton.clicked.connect(self.saveSetting)
main_layout.addWidget(self.saveButton)
# 添加弹性空间
main_layout.addStretch()
def loadSettings(self):
"""加载设置数据"""
try:
if self.tcpType == 'master':
query = TCPSetting.get_by_id(1)
else:
query = TCPSetting.get_by_id(2)
port = str(query.port)
host = str(query.host)
frequency = str(query.frequency)
offset = str(query.offset)
self.ipEdit.setText(host)
self.portEdit.setText(port)
self.freEdit.setText(frequency)
self.offsetBox.setCurrentText(offset)
except Exception as e:
print(f"加载TCP设置失败: {e}")
# 设置默认值
self.ipEdit.setText("127.0.0.1")
self.portEdit.setText("502")
self.freEdit.setText("1")
self.offsetBox.setCurrentText("1")
def saveSetting(self):
host = self.ipEdit.text()
port = self.portEdit.text()
frequency = self.freEdit.text()
offset = self.offsetBox.currentText()
if self.tcpType == 'master':
TCPSetting.update(host = host, port = port, frequency = frequency, offset = offset).where(TCPSetting.tcpType == 'master').execute()
else:
TCPSetting.update(host = host, port = port, frequency = frequency, offset = offset).where(TCPSetting.tcpType == 'slave').execute()
QMessageBox.information(self, 'Sucess', '保存成功')
"""保存设置"""
try:
host = self.ipEdit.text()
port = self.portEdit.text()
frequency = self.freEdit.text()
offset = self.offsetBox.currentText()
if self.tcpType == 'master':
TCPSetting.update(host=host, port=port, frequency=frequency, offset=offset).where(TCPSetting.tcpType == 'master').execute()
else:
TCPSetting.update(host=host, port=port, frequency=frequency, offset=offset).where(TCPSetting.tcpType == 'slave').execute()
# 创建消息框
QMessageBox.information(self, '保存成功', f'TCP{self.tcpType}站配置已保存!')
except Exception as e:
QMessageBox.critical(self, '保存失败', f'保存TCP设置时发生错误{str(e)}')

@ -141,7 +141,7 @@ class TrendWidgets(QWidget):
self.queryBtn = QToolButton()
self.queryBtn.setObjectName("trendQueryBtn")
self.queryBtn.setText("查询数据")
self.queryBtn.setIcon(qtawesome.icon('fa.search', color='#FFFFFF'))
self.queryBtn.setIcon(qtawesome.icon('fa.search', color='#2277EF'))
self.queryBtn.setToolButtonStyle(Qt.ToolButtonTextBesideIcon)
self.queryBtn.setIconSize(QSize(16, 16))
self.queryBtn.setToolTip("按时间范围查询变量数据")
@ -151,7 +151,7 @@ class TrendWidgets(QWidget):
self.refreshBtn = QToolButton()
self.refreshBtn.setObjectName("trendRefreshBtn")
self.refreshBtn.setText("刷新列表")
self.refreshBtn.setIcon(qtawesome.icon('fa.refresh', color='#FFFFFF'))
self.refreshBtn.setIcon(qtawesome.icon('fa.refresh', color='#059669'))
self.refreshBtn.setToolButtonStyle(Qt.ToolButtonTextBesideIcon)
self.refreshBtn.setIconSize(QSize(16, 16))
self.refreshBtn.setToolTip("刷新变量列表")
@ -167,7 +167,7 @@ class TrendWidgets(QWidget):
self.addToTrendBtn = QToolButton()
self.addToTrendBtn.setObjectName("trendAddBtn")
self.addToTrendBtn.setText("添加变量")
self.addToTrendBtn.setIcon(qtawesome.icon('fa.plus', color='#FFFFFF'))
self.addToTrendBtn.setIcon(qtawesome.icon('fa.plus', color='#7C3AED'))
self.addToTrendBtn.setToolButtonStyle(Qt.ToolButtonTextBesideIcon)
self.addToTrendBtn.setIconSize(QSize(16, 16))
self.addToTrendBtn.setToolTip("将选中的变量添加到趋势图")
@ -177,7 +177,7 @@ class TrendWidgets(QWidget):
self.clearAllBtn = QToolButton()
self.clearAllBtn.setObjectName("trendClearBtn")
self.clearAllBtn.setText("清除所有")
self.clearAllBtn.setIcon(qtawesome.icon('fa.trash', color='#FFFFFF'))
self.clearAllBtn.setIcon(qtawesome.icon('fa.trash', color='#DC2626'))
self.clearAllBtn.setToolButtonStyle(Qt.ToolButtonTextBesideIcon)
self.clearAllBtn.setIconSize(QSize(16, 16))
self.clearAllBtn.setToolTip("清除趋势图中的所有变量")

@ -29,7 +29,7 @@ class UserTableView(QTableView):
self.setSelectionBehavior(QAbstractItemView.SelectRows)
self.model = UserTableModel([' ID', '用户名', '登陆密码', '备注', '创建时间', '工程管理权限', '通讯配置权限', '用户管理权限','趋势查看权限','操作'],[], table = self)
self.model = UserTableModel([' ID', '用户名', '登陆密码', '备注', '创建时间', '工程管理权限', '通讯配置权限', '用户管理权限','趋势查看权限','操作'],[], table = self)
self.setModel(self.model)
self.header = CheckBoxHeader(changeY = True)
self.header.setObjectName('userHeader')

@ -3,6 +3,7 @@ from PyQt5.QtCore import QSize, Qt
from PyQt5.Qt import *
from PyQt5.QtGui import QIcon
from PyQt5.QtWidgets import QSplitter
import qtawesome as qta
from .UserTable import UserTableView
from utils.DBModels.UserModels import User
@ -15,20 +16,112 @@ class UserWidgets(QtWidgets.QWidget):
def __init__(self, parent=None):
super(UserWidgets, self).__init__(parent)
self.setAttribute(Qt.WA_StyledBackground, True)
self.setupUI()
def setupButtonIcon(self, button, icon_name, color):
"""设置按钮图标,支持不同状态的颜色变化"""
# 正常状态图标
normal_icon = qta.icon(icon_name, color=color)
self.createBtn = QPushButton(QIcon('./Static/add.png'), '添加用户')
self.createBtn.setObjectName('forceBtn')
self.createBtn.setIconSize(QSize(22, 22))
# 悬停状态图标(稍微亮一些)
hover_color = self.lightenColor(color, 0.2)
hover_icon = qta.icon(icon_name, color=hover_color)
# 按下状态图标(稍微暗一些)
pressed_color = self.darkenColor(color, 0.2)
pressed_icon = qta.icon(icon_name, color=pressed_color)
# 设置图标
button.setIcon(normal_icon)
# 存储不同状态的图标,用于状态切换
button._normal_icon = normal_icon
button._hover_icon = hover_icon
button._pressed_icon = pressed_icon
# 连接事件
button.enterEvent = lambda event: self.onButtonEnter(button, event)
button.leaveEvent = lambda event: self.onButtonLeave(button, event)
button.mousePressEvent = lambda event: self.onButtonPress(button, event)
button.mouseReleaseEvent = lambda event: self.onButtonRelease(button, event)
def lightenColor(self, color, factor):
"""使颜色变亮"""
if color.startswith('#'):
# 十六进制颜色
r = int(color[1:3], 16)
g = int(color[3:5], 16)
b = int(color[5:7], 16)
r = min(255, int(r + (255 - r) * factor))
g = min(255, int(g + (255 - g) * factor))
b = min(255, int(b + (255 - b) * factor))
return f"#{r:02x}{g:02x}{b:02x}"
return color
def darkenColor(self, color, factor):
"""使颜色变暗"""
if color.startswith('#'):
# 十六进制颜色
r = int(color[1:3], 16)
g = int(color[3:5], 16)
b = int(color[5:7], 16)
r = max(0, int(r * (1 - factor)))
g = max(0, int(g * (1 - factor)))
b = max(0, int(b * (1 - factor)))
return f"#{r:02x}{g:02x}{b:02x}"
return color
def onButtonEnter(self, button, event):
"""按钮鼠标进入事件"""
if hasattr(button, '_hover_icon'):
button.setIcon(button._hover_icon)
# 调用原始的enterEvent
QPushButton.enterEvent(button, event)
def onButtonLeave(self, button, event):
"""按钮鼠标离开事件"""
if hasattr(button, '_normal_icon'):
button.setIcon(button._normal_icon)
# 调用原始的leaveEvent
QPushButton.leaveEvent(button, event)
def onButtonPress(self, button, event):
"""按钮鼠标按下事件"""
if hasattr(button, '_pressed_icon'):
button.setIcon(button._pressed_icon)
# 调用原始的mousePressEvent
QPushButton.mousePressEvent(button, event)
def onButtonRelease(self, button, event):
"""按钮鼠标释放事件"""
# 检查鼠标是否还在按钮上
if button.rect().contains(event.pos()):
if hasattr(button, '_hover_icon'):
button.setIcon(button._hover_icon)
else:
if hasattr(button, '_normal_icon'):
button.setIcon(button._normal_icon)
# 调用原始的mouseReleaseEvent
QPushButton.mouseReleaseEvent(button, event)
def setupUI(self):
# 添加用户按钮
self.createBtn = QPushButton('添加用户')
self.createBtn.setObjectName('createBtn')
self.createBtn.setIconSize(QSize(18, 18))
self.createBtn.clicked.connect(self.createUser)
self.setupButtonIcon(self.createBtn, 'fa5s.user-plus', '#2277EF')
# self.importBtn = QPushButton(QIcon('./Static/import.png'), '导入变量')
# self.importBtn.setObjectName('importBtn')
# self.importBtn.setIconSize(QSize(22, 22))
self.delBtn = QPushButton(QIcon('./Static/delete.png'), '批量删除')
# 批量删除按钮
self.delBtn = QPushButton('批量删除')
self.delBtn.setObjectName('delBtn')
self.delBtn.setIconSize(QSize(22, 22))
self.delBtn.setIconSize(QSize(18, 18))
self.delBtn.clicked.connect(self.deleteUser)
self.setupButtonIcon(self.delBtn, 'fa5s.user-minus', '#DC2626')
self.userView = UserTableView()
self.userView.setObjectName('userView')

@ -296,7 +296,7 @@ class ModbusButtonDelegate(BaseButtonDelegate):
widget = QWidget()
widget.setLayout(hboxLayout)
widget.setStyleSheet("QComboBox { background-color: transparent; }")
# 所有下拉框使用统一样式
widget.setObjectName('ModbusButtonWidget')
comboBox.setObjectName('ModbusOrderBox')
@ -530,7 +530,7 @@ class ModbusTypeBox(QItemDelegate):
comboBox.setProperty('disabled', False)
widget = QWidget()
# widget.setStyleSheet("QWidget { background-color: transparent; }")
widget.setStyleSheet("QComboBox { background-color: transparent; }")
widget.setLayout(hboxLayout)
self.parent().setIndexWidget(index, widget)
self.parent().openPersistentEditor(index)
@ -565,7 +565,7 @@ class ModbusVarModelBox(QItemDelegate):
setattr(self, comBox, QComboBox())
comboBox = getattr(self, comBox)
comboBox = QComboBox(self.parent())
items = ['本地值', '模拟值', '远程值']
items = ['本地值', '模拟值']
comboBox.addItems(items)
comboBox.setCurrentText(str(self.parent().model.datas[index.row()][index.column()]))
@ -579,7 +579,7 @@ class ModbusVarModelBox(QItemDelegate):
hboxLayout.setContentsMargins(2, 2, 2, 2)
comboBox.index = [index.row(), index.column()]
widget = QWidget()
# widget.setStyleSheet("QWidget { background-color: transparent; }")
widget.setStyleSheet("QComboBox { background-color: transparent; }")
widget.setLayout(hboxLayout)
self.parent().setIndexWidget(index, widget)
self.parent().openPersistentEditor(index)

@ -66,8 +66,6 @@ class TcRtdModel(VarTableModel):
print("行或者列有问题")
return QVariant()
if role == Qt.BackgroundRole:
if QModelIndex.row() % 2 == 0 and self.datas[QModelIndex.row()][3] not in Globals.getValue('forceVars'):
return QtGui.QColor('#EFEFEF')
if self.datas[QModelIndex.row()][3] in Globals.getValue('forceVars'):
return QtGui.QColor('#00FF7F')
if role == Qt.TextColorRole:
@ -188,21 +186,6 @@ class TcRtdButtonDelegate(BaseButtonDelegate):
QWidget {
background-color: transparent;
}
QPushButton {
background-color: rgba(255, 255, 255, 180);
border: 1px solid #E5E7EB;
border-radius: 3px;
padding: 3px;
margin: 1px;
min-height: 20px;
max-height: 24px;
min-width: 24px;
max-width: 28px;
}
QPushButton:hover {
background-color: rgba(255, 255, 255, 255);
border-color: #2277EF;
}
""")
self.parent().setIndexWidget(
@ -350,6 +333,14 @@ class TcRtdTypeDelegate(TcRtdButtonDelegate):
super(TcRtdTypeDelegate, self).__init__(parent)
def paint(self, painter, option, index):
if index.data(Qt.BackgroundRole):
height = option.rect.height()
top = option.rect.top()
# 减少高度调整,保持更多的绘制区域
paint_rect = option.rect
paint_rect.setHeight(max(46, height - 4)) # 最小保持46px高度
paint_rect.moveTop(top + 2)
painter.fillRect(paint_rect, index.data(Qt.BackgroundRole))
if not self.parent().indexWidget(index):
comboBox = QComboBox(self.parent())
if index.row() < 8:
@ -376,6 +367,7 @@ class TcRtdTypeDelegate(TcRtdButtonDelegate):
# comboBox.setStyleSheet("QComboBox { background-color: #EFEFEF }")
# else:
# comboBox.setStyleSheet("QComboBox { background-color: #e9e7e3 }")
widget.setStyleSheet("QComboBox { background-color: transparent; }")
self.parent().setIndexWidget(
index,
widget

@ -102,7 +102,8 @@ class VarTableView(QTableView):
self.setupUi()
def setHeader(self):
self.delegate = BackgroundDelegate(self)
self.setItemDelegate(self.delegate)
self.setItemDelegateForColumn(11, ModbusButtonDelegate(self))
self.setItemDelegateForColumn(5, ModbusTypeBox(self))
self.setItemDelegateForColumn(10, ModbusVarModelBox(self))

@ -2,6 +2,7 @@ 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
import qtawesome as qta
from UI.VarManages.VarTable import VarTableView, HartTableView, TcRtdTableView, AnalogTableView, \
HartSimulateTableView, RpcVarTableView
@ -21,44 +22,134 @@ class VarWidgets(QtWidgets.QWidget):
super(VarWidgets, self).__init__(parent)
self.modbusType = modbusType
self.setupUI()
def setupButtonIcon(self, button, icon_name, color):
"""设置按钮图标,支持不同状态的颜色变化"""
# 正常状态图标
normal_icon = qta.icon(icon_name, color=color)
# 悬停状态图标(稍微亮一些)
hover_color = self.lightenColor(color, 0.2)
hover_icon = qta.icon(icon_name, color=hover_color)
# 按下状态图标(稍微暗一些)
pressed_color = self.darkenColor(color, 0.2)
pressed_icon = qta.icon(icon_name, color=pressed_color)
# 设置图标
button.setIcon(normal_icon)
# 存储不同状态的图标,用于状态切换
button._normal_icon = normal_icon
button._hover_icon = hover_icon
button._pressed_icon = pressed_icon
# 连接事件
button.enterEvent = lambda event: self.onButtonEnter(button, event)
button.leaveEvent = lambda event: self.onButtonLeave(button, event)
button.mousePressEvent = lambda event: self.onButtonPress(button, event)
button.mouseReleaseEvent = lambda event: self.onButtonRelease(button, event)
def lightenColor(self, color, factor):
"""使颜色变亮"""
if color.startswith('#'):
# 十六进制颜色
r = int(color[1:3], 16)
g = int(color[3:5], 16)
b = int(color[5:7], 16)
r = min(255, int(r + (255 - r) * factor))
g = min(255, int(g + (255 - g) * factor))
b = min(255, int(b + (255 - b) * factor))
return f"#{r:02x}{g:02x}{b:02x}"
return color
def darkenColor(self, color, factor):
"""使颜色变暗"""
if color.startswith('#'):
# 十六进制颜色
r = int(color[1:3], 16)
g = int(color[3:5], 16)
b = int(color[5:7], 16)
r = max(0, int(r * (1 - factor)))
g = max(0, int(g * (1 - factor)))
b = max(0, int(b * (1 - factor)))
return f"#{r:02x}{g:02x}{b:02x}"
return color
def onButtonEnter(self, button, event):
"""按钮鼠标进入事件"""
if hasattr(button, '_hover_icon'):
button.setIcon(button._hover_icon)
# 调用原始的enterEvent
QPushButton.enterEvent(button, event)
def onButtonLeave(self, button, event):
"""按钮鼠标离开事件"""
if hasattr(button, '_normal_icon'):
button.setIcon(button._normal_icon)
# 调用原始的leaveEvent
QPushButton.leaveEvent(button, event)
def onButtonPress(self, button, event):
"""按钮鼠标按下事件"""
if hasattr(button, '_pressed_icon'):
button.setIcon(button._pressed_icon)
# 调用原始的mousePressEvent
QPushButton.mousePressEvent(button, event)
def onButtonRelease(self, button, event):
"""按钮鼠标释放事件"""
# 检查鼠标是否还在按钮上
if button.rect().contains(event.pos()):
if hasattr(button, '_hover_icon'):
button.setIcon(button._hover_icon)
else:
if hasattr(button, '_normal_icon'):
button.setIcon(button._normal_icon)
# 调用原始的mouseReleaseEvent
QPushButton.mouseReleaseEvent(button, event)
def setupUI(self):
self.setAttribute(Qt.WA_StyledBackground, True)
self.createBtn = QPushButton(QIcon('./Static/add.png'), '新建变量')
# 新建变量按钮
self.createBtn = QPushButton('新建变量')
self.createBtn.setObjectName('createBtn')
self.createBtn.setIconSize(QSize(22, 22))
self.createBtn.setIconSize(QSize(18, 18))
self.createBtn.clicked.connect(self.createVar)
self.setupButtonIcon(self.createBtn, 'fa5s.plus', '#2277EF')
self.forceBtn = QPushButton(QIcon('./Static/start.png'), '批量强制')
# 批量强制按钮
self.forceBtn = QPushButton('批量强制')
self.forceBtn.setObjectName('forceBtn')
self.forceBtn.setIconSize(QSize(22, 22))
self.forceBtn.setIconSize(QSize(18, 18))
self.forceBtn.clicked.connect(self.forceVar)
self.setupButtonIcon(self.forceBtn, 'fa5s.play', '#F59E0B')
self.clearBtn = QPushButton(QIcon('./Static/clear.png'), '清除颜色')
# 清除颜色按钮
self.clearBtn = QPushButton('清除颜色')
self.clearBtn.setObjectName('clearBtn')
self.clearBtn.setIconSize(QSize(22, 22))
self.clearBtn.setIconSize(QSize(18, 18))
self.clearBtn.clicked.connect(self.clearColour)
self.setupButtonIcon(self.clearBtn, 'fa5s.eraser', '#DC2626')
# self.importBtn = QPushButton(QIcon(':/Static/import.png'), '导入变量')
# self.importBtn.setObjectName('importBtn')
# self.importBtn.setIconSize(QSize(22, 22))
# self.importBtn.clicked.connect(self.importVar)
# self.exportBtn = QPushButton(QIcon(':/Static/export.png'), '导出变量')
# self.exportBtn.setObjectName('exportBtn')
# self.exportBtn.setIconSize(QSize(22, 22))
# self.exportBtn.clicked.connect(self.exportVar)
self.messageBtn = QPushButton(QIcon('./Static/message.png'), '查看报文')
# 查看报文按钮
self.messageBtn = QPushButton('查看报文')
self.messageBtn.setObjectName('messageBtn')
self.messageBtn.setIconSize(QSize(22, 22))
self.messageBtn.setIconSize(QSize(18, 18))
self.messageBtn.clicked.connect(self.showMessage)
self.setupButtonIcon(self.messageBtn, 'fa5s.envelope', '#8B5CF6')
self.startProtocolBtn = QPushButton(QIcon('./Static/startProtocol.png'), '开始通讯')
# 开始通讯按钮
self.startProtocolBtn = QPushButton('开始通讯')
self.startProtocolBtn.setObjectName('startProtocolBtn')
self.startProtocolBtn.setIconSize(QSize(22, 22))
self.startProtocolBtn.setIconSize(QSize(18, 18))
self.startProtocolBtn.clicked.connect(self.startProtocol)
self.setupButtonIcon(self.startProtocolBtn, 'fa5s.play-circle', '#059669')
self.varView = VarTableView(self.modbusType, self)
self.varView.setObjectName('varView')
@ -91,7 +182,6 @@ class VarWidgets(QtWidgets.QWidget):
# self.comboBox.currentIndexChanged.connect(self.on_comboBox_currentIndexChanged)
self.horizontalHeader = self.varView.horizontalHeader()
self.horizontalHeader.sectionClicked.connect(self.on_view_horizontalHeader_sectionClicked)
@ -308,7 +398,7 @@ class VarWidgets(QtWidgets.QWidget):
if success:
self._isPopenOpen = True
self.startProtocolBtn.setText('停止通讯')
self.startProtocolBtn.setIcon(QIcon('./Static/pause.png'))
self.setupButtonIcon(self.startProtocolBtn, 'fa5s.stop-circle', '#DC2626')
else:
QMessageBox.warning(self, '错误', 'Modbus 通讯启动失败', QMessageBox.Yes)
except Exception as e:
@ -329,7 +419,7 @@ class VarWidgets(QtWidgets.QWidget):
if success:
self._isPopenOpen = False
self.startProtocolBtn.setText('开始通讯')
self.startProtocolBtn.setIcon(QIcon('./Static/startProtocol.png'))
self.setupButtonIcon(self.startProtocolBtn, 'fa5s.play-circle', '#059669')
else:
QMessageBox.warning(self, '错误', 'Modbus 通讯停止失败', QMessageBox.Yes)
except Exception as e:
@ -338,7 +428,7 @@ class VarWidgets(QtWidgets.QWidget):
def initIcon(self):
self._isPopenOpen = False
self.startProtocolBtn.setText('开始通讯')
self.startProtocolBtn.setIcon(QIcon('./Static/startProtocol.png'))
self.setupButtonIcon(self.startProtocolBtn, 'fa5s.play-circle', '#059669')
def performSearch(self, searchText):
"""统一搜索接口"""
@ -400,21 +490,19 @@ class TcRtdWidgets(VarWidgets):
def setupUI(self):
self.setAttribute(Qt.WA_StyledBackground, True)
self.forceBtn = QPushButton(QIcon('./Static/start.png'), '批量强制')
# 批量强制按钮
self.forceBtn = QPushButton('批量强制')
self.forceBtn.setObjectName('forceBtn')
self.forceBtn.setIconSize(QSize(22, 22))
self.forceBtn.setIconSize(QSize(18, 18))
self.forceBtn.clicked.connect(self.forceVar)
self.setupButtonIcon(self.forceBtn, 'fa5s.play', '#F59E0B')
# self.startProtocolBtn = QPushButton(QIcon('./Static/startProtocol.png'), '开始通讯')
# self.startProtocolBtn.setObjectName('startProtocolBtn')
# self.startProtocolBtn.setIconSize(QSize(22, 22))
# self.startProtocolBtn.clicked.connect(self.startProtocol)
self.clearBtn = QPushButton(QIcon('./Static/clear.png'), '清除颜色')
# 清除颜色按钮
self.clearBtn = QPushButton('清除颜色')
self.clearBtn.setObjectName('clearBtn')
self.clearBtn.setIconSize(QSize(22, 22))
self.clearBtn.setIconSize(QSize(18, 18))
self.clearBtn.clicked.connect(self.clearColour)
self.setupButtonIcon(self.clearBtn, 'fa5s.eraser', '#DC2626')
self.varView = TcRtdTableView()
self.varView.setObjectName('varView')
@ -494,20 +582,19 @@ class AnalogWidgets(VarWidgets):
self.setAttribute(Qt.WA_StyledBackground, True)
self.forceBtn = QPushButton(QIcon('./Static/start.png'), '批量强制')
# 批量强制按钮
self.forceBtn = QPushButton('批量强制')
self.forceBtn.setObjectName('forceBtn')
self.forceBtn.setIconSize(QSize(22, 22))
self.forceBtn.setIconSize(QSize(18, 18))
self.forceBtn.clicked.connect(self.forceVar)
self.setupButtonIcon(self.forceBtn, 'fa5s.play', '#F59E0B')
self.startProtocolBtn = QPushButton(QIcon('./Static/startProtocol.png'), '开始通讯')
# # self.startProtocolBtn.setObjectName('startProtocolBtn')
# self.startProtocolBtn.setIconSize(QSize(22, 22))
# self.startProtocolBtn.clicked.connect(self.startProtocol)
self.clearBtn = QPushButton(QIcon('./Static/clear.png'), '清除颜色')
# 清除颜色按钮
self.clearBtn = QPushButton('清除颜色')
self.clearBtn.setObjectName('clearBtn')
self.clearBtn.setIconSize(QSize(22, 22))
self.clearBtn.setIconSize(QSize(18, 18))
self.clearBtn.clicked.connect(self.clearColour)
self.setupButtonIcon(self.clearBtn, 'fa5s.eraser', '#DC2626')
self.varView = AnalogTableView()
self.varView.setObjectName('varView')

@ -18,7 +18,10 @@ if __name__ == '__main__':
app.setStyle(QStyleFactory.create('Fusion'))
app.setStyleSheet(CommonHelper.readQss('Static/Main.qss')
+ CommonHelper.readQss('Static/profibus.qss')
+ CommonHelper.readQss('Static/Area.qss'))
+ CommonHelper.readQss('Static/Area.qss')
+ CommonHelper.readQss('Static/CommSettings.qss')
+ CommonHelper.readQss('Static/TrendSettings.qss')
+ CommonHelper.readQss('Static/VarTableSettings.qss'))
reg = Register()
if not reg.checkLicense():
regWidget = RegisterWidget()

Loading…
Cancel
Save