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
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
|
|
|
|
|
|
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('停止刷新') |