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 class MessageWidget(QWidget): def __init__(self, parent=None): super(MessageWidget, self).__init__(parent) self.setupUI() self.setupConnections() def setupUI(self): """设置UI界面""" self.setObjectName("MessageWidget") self.resize(1037, 648) self.setWindowTitle('报文查看') # self.setWindowIcon(QIcon('./Static/file.png')) # 创建控件 self.recvLabel = QLabel("接收到报文") self.recvLabel.setObjectName("mesLabel") self.recvLabel.setAlignment(Qt.AlignCenter) self.sendLabel = QLabel("发送的报文") self.sendLabel.setObjectName("mesLabel") self.sendLabel.setAlignment(Qt.AlignCenter) self.clearButton = QPushButton("清空报文") self.clearButton.setObjectName("mesButton") self.refreshButton = QPushButton("停止刷新") self.refreshButton.setObjectName("mesButton") self.recvEdit = QTextEdit() self.recvEdit.setObjectName("mesEdit") self.sendEdit = QTextEdit() self.sendEdit.setObjectName("mesEdit") # 布局设置 self.setupLayout() # 定时器设置 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): """清空报文""" self.recvEdit.clear() self.sendEdit.clear() try: protocolManage = Globals.getValue('protocolManage') if protocolManage: protocolManage.clearModbusMessages() except Exception as e: pass def toggleRefresh(self): """切换刷新状态""" if self.timer.isActive(): self.timer.stop() self.refreshButton.setText('开始刷新') else: self.timer.start(1000) self.refreshButton.setText('停止刷新')