|
|
|
|
from PyQt5.QtCore import (QCoreApplication, Qt)
|
|
|
|
|
from PyQt5.QtWidgets import (QVBoxLayout, QLabel, QLineEdit,
|
|
|
|
|
QPushButton, QWidget, QComboBox, QMessageBox, QListView)
|
|
|
|
|
|
|
|
|
|
from utils.DBModels.ProtocolModel import TCPSetting
|
|
|
|
|
|
|
|
|
|
class CustomBox(QComboBox):
|
|
|
|
|
def __init__(self):
|
|
|
|
|
super(CustomBox, self).__init__()
|
|
|
|
|
self.setCursor(Qt.PointingHandCursor)
|
|
|
|
|
self.setView(QListView())
|
|
|
|
|
|
|
|
|
|
def showPopup(self):
|
|
|
|
|
super(CustomBox, self).showPopup()
|
|
|
|
|
pop = self.children()[1]
|
|
|
|
|
pop.move(pop.x(), pop.y() + 51)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
class TCPSettingWidget(QWidget):
|
|
|
|
|
def __init__(self, tcpType):
|
|
|
|
|
super(TCPSettingWidget, self).__init__()
|
|
|
|
|
self.tcpType = tcpType
|
|
|
|
|
self.setObjectName("TCPSettingWidget")
|
|
|
|
|
self.setupUI()
|
|
|
|
|
|
|
|
|
|
def setupUI(self):
|
|
|
|
|
# 主布局 - 垂直布局
|
|
|
|
|
main_layout = QVBoxLayout(self)
|
|
|
|
|
main_layout.setContentsMargins(0, 0, 0, 0)
|
|
|
|
|
main_layout.setSpacing(8)
|
|
|
|
|
|
|
|
|
|
# IP地址
|
|
|
|
|
self.label = QLabel('IP地址')
|
|
|
|
|
self.label.setObjectName("setlabel")
|
|
|
|
|
self.ipEdit = QLineEdit()
|
|
|
|
|
self.ipEdit.setObjectName("setEdit")
|
|
|
|
|
main_layout.addWidget(self.label)
|
|
|
|
|
main_layout.addWidget(self.ipEdit)
|
|
|
|
|
|
|
|
|
|
# 端口号
|
|
|
|
|
self.label_2 = QLabel('端口号')
|
|
|
|
|
self.label_2.setObjectName("setlabel")
|
|
|
|
|
self.portEdit = QLineEdit()
|
|
|
|
|
self.portEdit.setObjectName("setEdit")
|
|
|
|
|
main_layout.addWidget(self.label_2)
|
|
|
|
|
main_layout.addWidget(self.portEdit)
|
|
|
|
|
|
|
|
|
|
# 通讯频率
|
|
|
|
|
self.label_3 = QLabel('通讯频率')
|
|
|
|
|
self.label_3.setObjectName("setlabel")
|
|
|
|
|
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.saveButton = QPushButton('保存')
|
|
|
|
|
if self.tcpType == 'master':
|
|
|
|
|
self.saveButton.setObjectName("tcpSaveButton")
|
|
|
|
|
else:
|
|
|
|
|
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):
|
|
|
|
|
"""保存设置"""
|
|
|
|
|
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)}')
|