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.

113 lines
3.8 KiB
Python

from PyQt5.QtWidgets import QWidget, QLabel, QPushButton, QTextEdit, QHBoxLayout, QVBoxLayout, QGridLayout, QSpacerItem, QSizePolicy
from PyQt5.QtCore import Qt, QTimer, QCoreApplication
from PyQt5.QtGui import QIcon
from utils import Globals
7 months ago
class MessageWidget(QWidget):
def __init__(self, parent=None):
super(MessageWidget, self).__init__(parent)
self.setupUI()
self.setupConnections()
def setupUI(self):
"""设置UI界面"""
self.setObjectName("MessageWidget")
7 months ago
self.resize(1037, 648)
self.setWindowTitle('报文查看')
# self.setWindowIcon(QIcon('./Static/file.png'))
# 创建控件
self.recvLabel = QLabel("接收到报文")
7 months ago
self.recvLabel.setObjectName("mesLabel")
self.recvLabel.setAlignment(Qt.AlignCenter)
self.sendLabel = QLabel("发送的报文")
7 months ago
self.sendLabel.setObjectName("mesLabel")
self.sendLabel.setAlignment(Qt.AlignCenter)
self.clearButton = QPushButton("清空报文")
7 months ago
self.clearButton.setObjectName("mesButton")
self.refreshButton = QPushButton("停止刷新")
self.refreshButton.setObjectName("mesButton")
self.recvEdit = QTextEdit()
7 months ago
self.recvEdit.setObjectName("mesEdit")
self.sendEdit = QTextEdit()
7 months ago
self.sendEdit.setObjectName("mesEdit")
# 布局设置
self.setupLayout()
# 定时器设置
7 months ago
self.timer = QTimer(self)
self.timer.timeout.connect(self.updateMessages)
self.timer.start(1000) # 每秒更新一次
def setupLayout(self):
"""设置布局"""
# 按钮布局
buttonLayout = QHBoxLayout()
buttonLayout.addWidget(self.clearButton)
buttonSpacer = QSpacerItem(40, 20, QSizePolicy.Expanding, QSizePolicy.Minimum)
buttonLayout.addItem(buttonSpacer)
buttonLayout.addWidget(self.refreshButton)
# 主布局
mainLayout = QGridLayout(self)
mainLayout.addLayout(buttonLayout, 0, 0, 1, 2)
mainLayout.addWidget(self.recvLabel, 1, 0, 1, 1)
mainLayout.addWidget(self.sendLabel, 1, 1, 1, 1)
mainLayout.addWidget(self.recvEdit, 2, 0, 1, 1)
mainLayout.addWidget(self.sendEdit, 2, 1, 1, 1)
def setupConnections(self):
"""设置信号连接"""
self.clearButton.clicked.connect(self.clearMessages)
self.refreshButton.clicked.connect(self.toggleRefresh)
def updateMessages(self):
"""更新报文显示"""
try:
protocolManage = Globals.getValue('protocolManage')
if not protocolManage:
return
# 获取 Modbus 报文
messages = protocolManage.getModbusMessages()
# 清空并更新接收报文
self.recvEdit.clear()
for msg in messages['receive']:
self.recvEdit.append(msg)
# 清空并更新发送报文
self.sendEdit.clear()
for msg in messages['send']:
self.sendEdit.append(msg)
except Exception as e:
pass
def clearMessages(self):
"""清空报文"""
7 months ago
self.recvEdit.clear()
self.sendEdit.clear()
try:
protocolManage = Globals.getValue('protocolManage')
if protocolManage:
protocolManage.clearModbusMessages()
except Exception as e:
pass
def toggleRefresh(self):
"""切换刷新状态"""
7 months ago
if self.timer.isActive():
self.timer.stop()
self.refreshButton.setText('开始刷新')
7 months ago
else:
self.timer.start(1000)
self.refreshButton.setText('停止刷新')