init comit

首次提交
This commit is contained in:
JingweiCui 2025-02-14 11:11:41 +08:00
commit 70951cc4e2
28 changed files with 1901 additions and 0 deletions

4
.gitignore vendored Normal file
View File

@ -0,0 +1,4 @@
__pycache__
dist
build
.idea

View File

@ -0,0 +1,37 @@
# -*- mode: python ; coding: utf-8 -*-
a = Analysis(
['main.py'],
pathex=['.\\venv\\Lib\\site-packages\\'],
binaries=[],
datas=[],
hiddenimports=[],
hookspath=[],
hooksconfig={},
runtime_hooks=[],
excludes=[],
noarchive=False,
)
pyz = PYZ(a.pure)
exe = EXE(
pyz,
a.scripts,
a.binaries,
a.datas,
[],
name='Brisonus_Params_2.0.4.exe',
debug=False,
bootloader_ignore_signals=False,
strip=False,
upx=True,
upx_exclude=[],
runtime_tmpdir=None,
console=False,
disable_windowed_traceback=False,
argv_emulation=False,
target_arch=None,
codesign_identity=None,
entitlements_file=None,
)

View File

@ -0,0 +1,37 @@
# -*- mode: python ; coding: utf-8 -*-
a = Analysis(
['main.py'],
pathex=['.\\venv\\Lib\\site-packages\\'],
binaries=[],
datas=[],
hiddenimports=[],
hookspath=[],
hooksconfig={},
runtime_hooks=[],
excludes=[],
noarchive=False,
)
pyz = PYZ(a.pure)
exe = EXE(
pyz,
a.scripts,
a.binaries,
a.datas,
[],
name='HuaYan_Params_2.0.3.exe',
debug=False,
bootloader_ignore_signals=False,
strip=False,
upx=True,
upx_exclude=[],
runtime_tmpdir=None,
console=False,
disable_windowed_traceback=False,
argv_emulation=False,
target_arch=None,
codesign_identity=None,
entitlements_file=None,
)

View File

@ -0,0 +1,37 @@
# -*- mode: python ; coding: utf-8 -*-
a = Analysis(
['main.py'],
pathex=['.\\venv\\Lib\\site-packages\\'],
binaries=[],
datas=[],
hiddenimports=[],
hookspath=[],
hooksconfig={},
runtime_hooks=[],
excludes=[],
noarchive=False,
)
pyz = PYZ(a.pure)
exe = EXE(
pyz,
a.scripts,
a.binaries,
a.datas,
[],
name='HuaYan_Params_2.0.4.exe',
debug=False,
bootloader_ignore_signals=False,
strip=False,
upx=True,
upx_exclude=[],
runtime_tmpdir=None,
console=False,
disable_windowed_traceback=False,
argv_emulation=False,
target_arch=None,
codesign_identity=None,
entitlements_file=None,
)

View File

@ -0,0 +1,37 @@
# -*- mode: python ; coding: utf-8 -*-
a = Analysis(
['main.py'],
pathex=['.\\venv\\Lib\\site-packages\\'],
binaries=[],
datas=[],
hiddenimports=[],
hookspath=[],
hooksconfig={},
runtime_hooks=[],
excludes=[],
noarchive=False,
)
pyz = PYZ(a.pure)
exe = EXE(
pyz,
a.scripts,
a.binaries,
a.datas,
[],
name='HuaYan_Params_2.0.exe',
debug=False,
bootloader_ignore_signals=False,
strip=False,
upx=True,
upx_exclude=[],
runtime_tmpdir=None,
console=False,
disable_windowed_traceback=False,
argv_emulation=False,
target_arch=None,
codesign_identity=None,
entitlements_file=None,
)

193
ParamsDict.yml Normal file
View File

@ -0,0 +1,193 @@
- params:
- id: 0
addr: 0
label: alpha
name: alpha
type: VAR
details: 参数1的作用是用于调节xxx功能的灵敏度。
- id: 1
addr: 1
label: gamma
name: gamma
type: VAR
details:
- id: 2
addr: 2
label: eta
name: eta
type: VAR
details:
- id: 3
addr: 3
label: delta
name: delta
type: VAR
details:
- id: 4
addr: 4
label: leaky_gain1
name: leaky_gain1
type: VAR
details:
- id: 5
addr: 5
label: step_gain1
name: step_gain1
type: VAR
details:
- id: 6
addr: 6
label: leaky_gain2
name: leaky_gain2
type: VAR
details:
- id: 7
addr: 7
label: step_gain2
name: step_gain2
type: VAR
details:
- id: 8
addr: 8
label: leaky_gain3
name: leaky_gain3
type: VAR
details:
- id: 9
addr: 9
label: step_gain3
name: step_gain3
type: VAR
details:
- id: 10
addr: 10
label: speaker_check_value
name: speaker_check_value
type: VAR
details:
- id: 11
addr: 11
label: tran_func_flag
name: tran_func_flag
type: VAR
details:
- id: 12
addr: 12
label: input_poi
name: input_poi
type: ARRAY
len: 20
details:
- id: 13
addr: 32
label: output_poi
name: output_poi
type: ARRAY
len: 8
details:
- id: 14
addr: 40
label: output_check
name: output_check
type: ARRAY
len: 3072
details:
- id: 15
addr: 3112
label: ref_check
name: ref_check
type: ARRAY
len: 4068
details:
- id: 16
addr: 7220
label: err_check
name: err_check
type: ARRAY
len: 2048
details:
- id: 17
addr: 9768
label: rnc_off
name: rnc_off
type: VAR
details:
- id: 18
addr: 9769
label: refer_num
name: refer_num
type: VAR
details:
- id: 19
addr: 9770
label: err_num
name: err_num
type: VAR
details:
- id: 20
addr: 9771
label: spk_num
name: spk_num
type: VAR
details:
- id: 21
addr: 9772
label: Input_Amplitude
name: Input_Amplitude
type: ARRAY
len: 10
details:
- id: 22
addr: 9782
label: store_mod
name: store_mod
type: VAR
details:
- id: 23
addr: 9783
label: Output_threshold
name: Output_threshold
type: VAR
details:
- id: 24
addr: 9784
label: Output_amplitude
name: Output_amplitude
type: VAR
details:
- id: 25
addr: 9785
label: running_time
name: running_time
type: VAR
details:
- id: 26
addr: 9786
label: alpha_10
name: alpha_10
type: VAR
details:
- id: 27
addr: 9787
label: start_fre_num
name: start_fre_num
type: VAR
details:
- id: 28
addr: 9788
label: first_fre_num
name: first_fre_num
type: VAR
details:
- id: 29
addr: 9789
label: second_fre_num
name: second_fre_num
type: VAR
details:
- id: 30
addr: 9790
label: check_mod
name: check_mod
type: VAR
details:

163
ParamsDict_01.yml Normal file
View File

@ -0,0 +1,163 @@
- params:
- id: 0
addr: 0
label: alpha
name: alpha
type: VAR
details: 参数1的作用是用于调节xxx功能的灵敏度。
- id: 1
addr: 1
label: gamma
name: gamma
type: VAR
details:
- id: 2
addr: 2
label: eta
name: eta
type: VAR
details:
- id: 3
addr: 3
label: delta
name: delta
type: VAR
details:
- id: 4
addr: 4
label: leaky_gain1
name: leaky_gain1
type: VAR
details:
- id: 5
addr: 5
label: step_gain1
name: step_gain1
type: VAR
details:
- id: 6
addr: 6
label: leaky_gain2
name: leaky_gain2
type: VAR
details:
- id: 7
addr: 7
label: step_gain2
name: step_gain2
type: VAR
details:
- id: 8
addr: 8
label: leaky_gain3
name: leaky_gain3
type: VAR
details:
- id: 9
addr: 9
label: step_gain3
name: step_gain3
type: VAR
details:
- id: 10
addr: 10
label: speaker_check_value
name: speaker_check_value
type: VAR
details:
- id: 11
addr: 11
label: tran_func_flag
name: tran_func_flag
type: VAR
details:
- id: 12
addr: 12
label: input_poi
name: input_poi
type: ARRAY
len: 20
details:
- id: 13
addr: 32
label: output_poi
name: output_poi
type: ARRAY
len: 8
details:
- id: 14
addr: 40
label: output_check
name: output_check
type: ARRAY
len: 3072
details:
- id: 15
addr: 3112
label: ref_check
name: ref_check
type: ARRAY
len: 4068
details:
- id: 16
addr: 7220
label: err_check
name: err_check
type: ARRAY
len: 2048
details:
- id: 17
addr: 9768
label: rnc_off
name: rnc_off
type: VAR
details:
- id: 18
addr: 9769
label: refer_num
name: refer_num
type: VAR
details:
- id: 18
addr: 9769
label: refer_num
name: refer_num
type: VAR
details:
- id: 19
addr: 9770
label: err_num
name: err_num
type: VAR
details:
- id: 20
addr: 9771
label: spk_num
name: spk_num
type: VAR
details:
- id: 21
addr: 9772
label: spk_num
name: spk_num
type: ARRAY
len: 10
details:
- id: 22
addr: 9782
label: store_mod
name: store_mod
type: VAR
details:
- id: 23
addr: 9783
label: threshold
name: threshold
type: VAR
details:
- id: 24
addr: 9784
label: amplitude
name: amplitude
type: VAR
details:

2
br_com_manager.py Normal file
View File

@ -0,0 +1,2 @@

59
br_com_message.py Normal file
View File

@ -0,0 +1,59 @@
import struct
class BrComMessage:
SOH = 0x0A
OP_READ = 0
OP_WRITE = 1
RES_READ = 100
RES_WRITE = 101
def __init__(self, operation, addr: int, val: float = 0.0):
self.operation = operation
self.addr = addr
self.val = val
def gen_message(self):
# 消息内容的组成:
# [SOH, operation_code, addr, val, checksum]
msg_pre = [self.SOH, self.operation] + \
list(struct.pack('H', self.addr)) + \
list(struct.pack('f', self.val)) + \
[self.compute_checksum()]
return msg_pre
def compute_checksum(self):
_sum = self.SOH
_sum += self.operation
for a_byte in struct.pack('<i', self.addr):
print(a_byte)
_sum += int(a_byte)
for a_byte in struct.pack('<f', self.val):
print('f', a_byte)
_sum += int(a_byte)
return _sum & 0xFF
# 静态方法:将一个消息内容列表解析为消息对象
@classmethod
def resolve_message(cls, message: list):
if message[0] != cls.SOH:
return (False,)
else:
# 获取操作码
op_code = message[1]
# 获取操作地址
addr = struct.unpack('H', bytes(message[2:4]))
# 获取操作值
val = struct.unpack('<f', bytes(message[4:8]))
print(val)
return True, BrComMessage(op_code, addr[0], val[0])
if __name__ == "__main__":
my_message = BrComMessage(BrComMessage.OP_READ, 100, val=1)
print(my_message.gen_message())
test_message = [0x0A, 0, 1, 0, 0, 0, 128, 63, 100]
res, msg = BrComMessage.resolve_message(test_message)
print(msg.val)

16
br_data_manager.py Normal file
View File

@ -0,0 +1,16 @@
from param_data import ParamData
class BrDataManager:
def __init__(self):
self.param_list = []
def update_param_val_by_addr(self, addr, val):
for _param in self.param_list:
if _param.type == ParamData.VAR_TYPE_VAR:
if _param.addr == addr:
_param.update_val(val)
if _param.type == ParamData.VAR_TYPE_ARR:
print('更新数组类型变量的值')
if _param.addr <= addr < (_param.addr + _param.size):
_param.getval_list[addr-_param.addr] = val

18
br_load_table.py Normal file
View File

@ -0,0 +1,18 @@
import yaml
def load_table(filepath) -> dict:
try:
with open(filepath, encoding='UTF-8') as f:
modules_data = yaml.load(f, yaml.FullLoader)
except Exception as e:
print(e)
return modules_data[0]['params']
if __name__ == "__main__":
param_list = load_table()[0]['params']
print(param_list[0])

24
br_serial_port.py Normal file
View File

@ -0,0 +1,24 @@
from PySide6.QtSerialPort import QSerialPort
from PySide6.QtCore import QByteArray, Signal, SignalInstance
class BrSerialPort(QSerialPort):
signal_data_received: SignalInstance = Signal(str)
signal_data_sent: SignalInstance = Signal()
def __init__(self, port_name, baud):
super().__init__()
self.setPortName(port_name)
self.setBaudRate(baud)
self.open(QSerialPort.OpenModeFlag.ReadWrite)
def write_data(self, send_data):
self.write(send_data)
self.signal_data_sent.emit()
def read_data(self):
m_read_data: QByteArray = self.readAll()
m_read_data_str = m_read_data.toStdString()
self.signal_data_received.emit(m_read_data_str)

96
br_widget_arr_details.py Normal file
View File

@ -0,0 +1,96 @@
from ui_arr_details import Ui_Widget
from PySide6.QtWidgets import QWidget, QTableWidgetItem
from PySide6.QtCore import Slot, Signal, SignalInstance
from param_data import ParamDataArr
from br_com_message import BrComMessage
from br_widget_basic_plot import BrWidgetBasicPlot
class BrWidgetArrDetails(QWidget, Ui_Widget):
signal_read: SignalInstance = Signal(list)
def __init__(self, parent=None):
super().__init__(parent)
self.setupUi(self)
self.param_data: ParamDataArr = None
# self.tableWidget_val.setRowCount(10)
self.tableWidget_val.setColumnCount(2)
self.tableWidget_val.setHorizontalHeaderLabels(['Addr', 'Value'])
# self.tableWidget_setval.setRowCount(10)
self.tableWidget_setval.setColumnCount(2)
self.tableWidget_setval.setHorizontalHeaderLabels(['Addr', 'Value'])
def update_param_info(self, p_data: ParamDataArr):
self.param_data = p_data
print(self.param_data.getval_list)
self.label_addr.setText(str(p_data.addr))
self.label_name.setText(str(p_data.name))
self.label_length.setText(str(p_data.size))
self.label_details.setText(str(p_data.details))
self.update_table()
def update_table(self):
self.tableWidget_val.setRowCount(self.param_data.size)
for row in range(0, self.param_data.size):
self.tableWidget_val.setItem(
row, 0, QTableWidgetItem(
str(self.param_data.addr + row)
)
)
self.tableWidget_val.setItem(
row, 1, QTableWidgetItem(
str(self.param_data.getval_list[row]))
)
def update_val_list(self):
for i in range(0, self.param_data.size):
self.tableWidget_val.setItem(0, i, QTableWidgetItem(str(self.param_data.getval_list[i])))
def update_setval_list(self):
for i in range(0, len(self.param_data.setval_list)):
self.tableWidget_setval.setItem(0, i, QTableWidgetItem(str(self.param_data.setval_list[i])))
@Slot()
def on_pushButton_write_clicked(self):
print('[write] button clicked!')
@Slot()
def on_pushButton_read_clicked(self):
print('[read] button clicked!')
# 生成一组读取命令
_cmd_list = []
for i in range(0, self.param_data.size):
_cmd_list.append(
BrComMessage(
BrComMessage.OP_READ,
self.param_data.addr + i
)
)
self.signal_read.emit(_cmd_list)
@Slot()
def on_pushButton_valplot_clicked(self):
print('[valpolt] button clicked!')
self.dialog = BrWidgetBasicPlot()
self.dialog.set_chart_data(self.param_data.getval_list, self.param_data.name)
self.dialog.show()
@Slot()
def on_pushButton_setvalplot_clicked(self):
print('[setvalplot] button clicked!')
if __name__ == "__main__":
from PySide6.QtWidgets import QApplication
import sys
app = QApplication()
widget = BrWidgetArrDetails()
param_data = ParamDataArr(10, 'name', 'NULL', 0, 10)
widget.update_param_info(param_data)
widget.update_val_list()
widget.update_setval_list()
widget.show()
sys.exit(app.exec())

99
br_widget_basic_plot.py Normal file
View File

@ -0,0 +1,99 @@
from ui_basic_plot import Ui_Dialog
from PySide6.QtWidgets import QDialog, QToolButton, QMenu, QFileDialog
from PySide6.QtGui import QAction
class BrWidgetBasicPlot(QDialog, Ui_Dialog):
line_color_list = [(0, 0, 255), (255, 0, 0), (0, 255, 0), (128, 128, 0), (128, 0, 0), (128, 128, 128)]
def __init__(self):
super().__init__()
self.plot = None
self.chart_data = []
self.action_delete = None
self.action_saveas = None
self.action_save = None
self.action_load = None
self.action1 = None
self.menu = None
self.line_color_index = 0
self.setupUi(self)
self.init_ui()
self.init_plot()
def init_ui(self):
self.toolButton_operation.setPopupMode(QToolButton.ToolButtonPopupMode.InstantPopup)
menu = QMenu(self)
self.action_load = QAction('加载', self)
self.action_load.triggered.connect(self.on_action_load)
self.action_save = QAction('保存', self)
self.action_save.triggered.connect(self.on_action_save)
self.action_saveas = QAction('另存', self)
self.action_saveas.triggered.connect(self.on_action_saveas)
self.action_delete = QAction('删除', self)
self.action_delete.triggered.connect(self.on_action_delete)
menu.addAction(self.action_load)
menu.addAction(self.action_save)
menu.addAction(self.action_saveas)
menu.addAction(self.action_delete)
self.menu = menu
self.toolButton_operation.setMenu(menu)
def init_plot(self):
self.plot = self.graphicsView.addPlot(title="Chart")
self.plot.showGrid(x=True, y=True)
self.graphicsView.setBackground('w')
def on_action_load(self):
print('action1 triggered')
# 实现文件加载
filename, filetype = QFileDialog.getOpenFileName(self,
"选取文件",
"./",
"Data Files (*.brdata)") # 设置文件扩展名过滤,注意用双分号间隔
if filename != '':
# 加载文件中的数据
try:
with open(filename, 'r') as f:
_data = f.read()
data_list = eval(_data)
self.line_color_index += 1
except Exception as e:
print(e)
self.plot.plot(data_list, pen=self.line_color_list[self.line_color_index], name=filename)
def set_chart_data(self, chart_data, param_name):
self.chart_data = chart_data
print(param_name)
self.plot.plot(chart_data, pen=self.line_color_list[self.line_color_index], name=param_name)
def on_action_save(self):
print('action2 triggered')
# 文件保存功能
print(self.chart_data)
fileName2, ok2 = QFileDialog.getSaveFileName(self,
"文件保存",
"./",
"Data Files (*.brdata)")
# 用户在文件保存对话框中选择了取消
if fileName2 != '':
with open(fileName2, 'w') as f:
f.write(str(self.chart_data))
def on_action_saveas(self):
print('action3 triggered')
def on_action_delete(self):
print('action delete triggered')
if __name__ == "__main__":
from PySide6.QtWidgets import QApplication
import sys
app = QApplication()
widget = BrWidgetBasicPlot()
widget.show()
sys.exit(app.exec())

56
br_widget_var_details.py Normal file
View File

@ -0,0 +1,56 @@
from PySide6.QtWidgets import QWidget
from PySide6.QtCore import Slot, Signal, SignalInstance
from ui_var_details import Ui_Widget
from param_data import ParamDataVar
from br_com_message import BrComMessage
class BrWidgetVarDetails(QWidget, Ui_Widget):
signal_read: SignalInstance = Signal(BrComMessage)
signal_write: SignalInstance = Signal(BrComMessage)
def __init__(self, parent=None):
super().__init__(parent)
self.setupUi(self)
self.param_data: ParamDataVar = None
def update_param_info(self, p_data: ParamDataVar):
self.param_data = p_data
self.label_addr.setText(str(p_data.addr))
self.label_name.setText(str(p_data.name))
self.label_details.setText(str(p_data.details))
self.lineEdit_var.setText(str(p_data.val()))
@Slot()
def on_pushButton_read_clicked(self):
print('[read] button clicked!')
# 生成读取命令,然后触发读取事件
m_msg = BrComMessage(
BrComMessage.OP_READ,
self.param_data.addr)
self.signal_read.emit(m_msg)
@Slot()
def on_pushButton_write_clicked(self):
print('[write] button clicked!')
# 获取数值
_write_val = float(self.lineEdit_var.text())
m_msg = BrComMessage(
BrComMessage.OP_WRITE,
self.param_data.addr,
_write_val
)
self.signal_write.emit(m_msg)
if __name__ == "__main__":
from PySide6.QtWidgets import QApplication
import sys
app = QApplication()
widget = BrWidgetVarDetails()
param_data = ParamDataVar(10, 'name', 'NULL', 0)
widget.update_param_info(param_data)
widget.show()
sys.exit(app.exec())

58
cmd_server.py Normal file
View File

@ -0,0 +1,58 @@
import time
from PySide6.QtCore import QThread, QMutex, QWaitCondition, Signal, SignalInstance
from queue import Queue
from br_com_message import BrComMessage
class CmdServer(QThread):
signal_write: SignalInstance = Signal(bytes)
# POLL_INTERVAL_TIME = 0.05
POLL_INTERVAL_TIME = 0.05
def __init__(self):
super().__init__()
self.isPause = True
self.isCancel = False
self.cmd_queue = Queue()
self.con = QWaitCondition()
self.mutex = QMutex()
self.mutex_rw = QMutex()
def pause(self):
self.isPause = True
def resume(self):
self.isCancel = False
self.isPause = False
self.con.wakeAll()
print('cmd server thread resume')
def cancel(self):
self.resume()
self.isCancel = True
def write(self, p_data: bytes):
self.signal_write.emit(p_data)
def run(self):
while not self.isCancel:
self.mutex.lock()
if self.isPause:
self.con.wait(self.mutex)
if self.isCancel:
break
self.mutex.unlock()
if not self.cmd_queue.empty():
m_msg: BrComMessage = self.cmd_queue.get()
msg_bytes = bytes(m_msg.gen_message())
self.signal_write.emit(msg_bytes)
time.sleep(self.POLL_INTERVAL_TIME)
if __name__ == "__main__":
server = CmdServer()
server.cmd_queue.put()

314
main.py Normal file
View File

@ -0,0 +1,314 @@
# 这是一个示例 Python 脚本。
import sys
from PySide6.QtWidgets import QMainWindow, QApplication, QFileDialog, QAbstractItemView, QMessageBox, QWidget
from PySide6.QtGui import QStandardItemModel, QStandardItem
from PySide6.QtCore import Slot, QModelIndex, QTimer
from rnc_tunning import Ui_MainWindow
from br_load_table import load_table
import serial.tools.list_ports
from br_widget_arr_details import BrWidgetArrDetails
from br_widget_var_details import BrWidgetVarDetails
from param_data import VarParamData, ParamData, ParamDataArr, ParamDataVar
from PySide6.QtSerialPort import QSerialPort
from cmd_server import CmdServer
from br_com_message import BrComMessage
from datetime import datetime
from br_data_manager import BrDataManager
TIMER_TIMEOUT = 10
params_filepath = 'ParamsDict.yml'
default_config = {
'baud_rate': 115200,
'polling_interval': 100
}
class PortInfo:
def __init__(self, num: str = '', baud_rate=115200, polling_interval=100):
self.num = num
self.baud_rate = baud_rate
self.polling_interval = polling_interval
# load_params_from_file('ParamsDict.yml')
class MainWindow(QMainWindow, Ui_MainWindow):
def __init__(self):
super().__init__()
self.widget = None
self.model = None
self.param_list = None
self.serial_port = None
self.setupUi(self)
self.param_data_list = []
self.data_manager = BrDataManager()
self.selected_row = 0
self.init_tableview()
# self.tableview_load_data()
self.setWindowTitle('Brisonus RNC Tunning Tool 2.0.4')
self.com = QSerialPort()
# com read定时器
self.read_timer: QTimer = QTimer()
self.read_timer.setSingleShot(True)
self.read_timer.timeout.connect(self.read_timer_stop)
# 消息管理服务器
self.cmd_server = CmdServer()
self.cmd_server.start()
self.cmd_server.resume()
self.cmd_server.signal_write.connect(self.com_write)
self.portlist = []
self.port_info = PortInfo()
self.init_comports()
self.widget_page_arr = BrWidgetArrDetails(self.widget)
self.widget_page_var = BrWidgetVarDetails(self.widget)
self.widget_page_var.signal_read.connect(self.on_var_read)
self.widget_page_var.signal_write.connect(self.on_var_write)
# 定义widget_page_arr的slot
self.widget_page_arr.signal_read.connect(self.on_arr_read)
# var arr 两个页面都处于隐藏状态
self.widget_page_arr.hide()
self.widget_page_var.hide()
# 默认加载可执行路径下
try:
self.tableview_load_data('ParamsDict.yml')
self.lineEdit_filename.setText('./ParamsDict.yml')
except Exception as e:
print(e)
def on_var_read(self, p):
if not self.com.isOpen():
# 弹出对话框提示用户serial port未处于open状态
self.show_msgbox('系统提示', '未打开端口!')
return
self.cmd_server.cmd_queue.put(p)
print('var widget read signal/callback on_read has been called!')
def on_var_write(self, p):
print('var widget write signal/callback on_read has been called!')
if not self.com.isOpen():
# 弹出对话框提示用户serial port未处于open状态
self.show_msgbox('系统提示', '未打开端口!')
return
self.cmd_server.cmd_queue.put(p)
def on_arr_read(self, p_cmd_list):
if not self.com.isOpen():
# 弹出对话框提示用户serial port未处于open状态
self.show_msgbox('系统提示', '未打开端口!')
return
for _cmd_item in p_cmd_list:
self.cmd_server.cmd_queue.put(_cmd_item)
print('arr widget signal/callback on_read has been called!')
def init_comports(self):
self.lineEdit_baudrate.setText(str(default_config['baud_rate']))
self.lineEdit_pollingInterval.setText(str(default_config['polling_interval']))
self.portlist = list(serial.tools.list_ports.comports())
for port_info in self.portlist:
self.comboBox_comports.addItem(str(port_info))
def init_tableview(self):
self.model = QStandardItemModel(0, 3)
self.model.setHorizontalHeaderLabels(['ID', 'Name', 'Value'])
self.tableView.horizontalHeader().setStretchLastSection(True)
self.tableView.setModel(self.model)
self.tableView.setSelectionMode(QAbstractItemView.SelectionMode.SingleSelection)
self.tableView.setSelectionBehavior(QAbstractItemView.SelectionBehavior.SelectRows)
# 设置不能编辑
self.tableView.setEditTriggers(QAbstractItemView.EditTrigger.NoEditTriggers)
self.tableView.clicked.connect(self.on_tableview_clicked)
def tableview_load_data(self, filepath):
param_list = load_table(filepath)
self.data_manager.param_list = []
# 将param_list转换为param_data_list
for param_item in param_list:
if param_item['type'] == 'VAR':
self.data_manager.param_list.append(ParamDataVar(
param_item['id'],
param_item['addr'],
param_item['name'],
param_item['details'],
0
))
if param_item['type'] == 'ARRAY':
self.data_manager.param_list.append(ParamDataArr(
param_item['id'],
param_item['addr'],
param_item['name'],
param_item['details'],
1,
param_item['len']
))
for i in range(0, len(self.data_manager.param_list)):
_param = self.data_manager.param_list[i]
print(_param)
self.model.setItem(i, 0, QStandardItem(str(_param.addr)))
self.model.setItem(i, 1, QStandardItem(str(_param.name)))
if _param.type == ParamData.VAR_TYPE_VAR:
_param.item = QStandardItem(str(_param.val()))
self.model.setItem(i, 2, _param.item)
if _param.type == ParamData.VAR_TYPE_ARR:
_param.item = QStandardItem(str('/'))
self.model.setItem(i, 2, _param.item)
def switch_page(self, page_name):
if page_name == 'var':
self.widget_page_arr.hide()
self.widget_page_var.show()
if page_name == 'arr':
self.widget_page_var.hide()
self.widget_page_arr.show()
def on_tableview_clicked(self, index: QModelIndex):
print('tableview clicked!', index.row())
self.selected_row = index.row()
param_index = index.row()
self.update_details_page(param_index)
def update_details_page(self, param_index):
# 将param的详细信息更新到右侧的详情Widget中进行显示
m_param_data = self.data_manager.param_list[param_index]
# 如果点击的是普通变量,则加载普通变量的控件
if m_param_data.type == VarParamData.VAR_TYPE_VAR:
print(self.widget)
self.update_var_details_ui(m_param_data)
self.switch_page('var')
# 如果点击的是数组型变量,则加载数据型变量的控件
if m_param_data.type == VarParamData.VAR_TYPE_ARR:
self.widget_page_arr.update_param_info(m_param_data)
self.switch_page('arr')
def update_var_details_ui(self, param_data: ParamDataVar):
print('update_var_details_ui')
self.widget_page_var.update_param_info(param_data)
@Slot()
def on_pushButton_set_clicked(self):
print('[设定] button clicked!')
# 获取所选择的端口号
_port_index = self.comboBox_comports.currentIndex()
self.port_info.num = self.portlist[_port_index][0]
# 获取所输入的波特率
self.port_info.baud_rate = int(self.lineEdit_baudrate.text())
# 设置QSerialPort参数
self.com.setPortName(self.port_info.num)
self.com.setBaudRate(self.port_info.baud_rate)
self.com.readyRead.connect(self.com_read)
self.com.open(QSerialPort.OpenModeFlag.ReadWrite)
self.show_msgbox('系统提示', '''
已打开端口:
Port number: %s
Baud rate: %d bps
Polling interval: 100ms
''' % (self.port_info.num, self.port_info.baud_rate))
def show_msgbox(self, title, content):
msg_box = QMessageBox()
msg_box.setWindowTitle(title)
msg_box.setText(content)
msg_box.exec()
def com_write(self, write_data: bytes):
# 判断serial port是否处于open状态
if not self.com.isOpen():
# 弹出对话框提示用户serial port未处于open状态
self.show_msgbox('系统提示', '未打开端口!')
return
self.com.write(write_data)
# 获取当前系统日期时间
current_datetime = datetime.now()
formatted_datetime = current_datetime.strftime("[%Y-%m-%d %H:%M:%S]")
write_str = "%s TX:" % formatted_datetime
self.textEdit.append(str(write_str) + write_data.hex(' '))
self.statusbar.showMessage('读取中...')
# 延时
def com_read(self):
# 启动读取定时器
self.read_timer.start(10)
def read_timer_stop(self):
recv_data = self.com.readAll().data()
if len(recv_data) < 9:
print('ccc', recv_data)
return
# 对收到的消息进行解析
res_msg = BrComMessage.resolve_message(list(recv_data))
if res_msg[0]:
# 更新参数的数值
_msg = res_msg[1]
if _msg.operation == BrComMessage.RES_READ:
self.data_manager.update_param_val_by_addr(
_msg.addr,
_msg.val
)
# 更新var page的显示值
self.statusbar.showMessage('地址[%d]读取完成!' % _msg.addr)
self.update_details_page(self.selected_row)
if _msg.operation == BrComMessage.RES_WRITE:
self.statusbar.showMessage('地址[%d]写入完成!' % _msg.addr)
current_datetime = datetime.now()
formatted_datetime = current_datetime.strftime("[%Y-%m-%d %H:%M:%S]")
write_str = "%s RX:" % formatted_datetime
self.textEdit.append(str(write_str) + recv_data.hex(' '))
@Slot()
def on_pushButton_loadfile_clicked(self):
print('[加载文件] button clicked!')
dialog = QFileDialog()
if dialog.exec():
filepath = dialog.selectedFiles()[0]
self.lineEdit_filename.setText(filepath)
self.tableview_load_data(filepath)
@Slot()
def on_pushButton_update_clicked(self):
print("[更新] button clicked!")
@Slot()
def on_pushButton_copy_clicked(self):
print("[复制信息] button clicked!")
def closeEvent(self, event):
reply = QMessageBox.question(self, '系统提示', '系统将退出,是否确认?',
QMessageBox.StandardButton.Yes | QMessageBox.StandardButton.No,
QMessageBox.StandardButton.No)
if reply == QMessageBox.StandardButton.Yes:
self.cmd_server.cancel()
self.cmd_server.quit()
self.cmd_server.wait()
else:
event.ignore()
# 按装订区域中的绿色按钮以运行脚本。
if __name__ == '__main__':
app = QApplication()
win = MainWindow()
win.show()
sys.exit(app.exec())

37
main.spec Normal file
View File

@ -0,0 +1,37 @@
# -*- mode: python ; coding: utf-8 -*-
a = Analysis(
['main.py'],
pathex=['.\\venv\\Lib\\site-packages\\'],
binaries=[],
datas=[],
hiddenimports=[],
hookspath=[],
hooksconfig={},
runtime_hooks=[],
excludes=[],
noarchive=False,
)
pyz = PYZ(a.pure)
exe = EXE(
pyz,
a.scripts,
a.binaries,
a.datas,
[],
name='main',
debug=False,
bootloader_ignore_signals=False,
strip=False,
upx=True,
upx_exclude=[],
runtime_tmpdir=None,
console=False,
disable_windowed_traceback=False,
argv_emulation=False,
target_arch=None,
codesign_identity=None,
entitlements_file=None,
)

66
param_data.py Normal file
View File

@ -0,0 +1,66 @@
class ParamData:
VAR_TYPE_VAR = 0
VAR_TYPE_ARR = 1
def __init__(self, p_id, addr, name, details, var_type):
self.id = p_id
self.addr = addr
self.name = name
self.details = details
self.type = var_type
self.item = None
class ParamDataVar(ParamData):
def __init__(self, p_id=0, addr=0, name='', details='', var_type=0):
super().__init__(p_id, addr, name, details, var_type)
self._getval = 0
self._setval = 0
def val(self):
return self._getval
def update_val(self, val):
self._getval = val
self.item.setText(str(self.val()))
def setval(self):
return self._setval
def update_setval(self, val):
self._setval = val
class ParamDataArr(ParamData):
def __init__(self, p_id=0, addr=0, name='', details='', var_type=0, length=1):
super().__init__(p_id, addr, name, details, var_type)
self.size = length
self.getval_list = [0] * length
self.setval_list = [0] * length
class VarParamData:
VAR_TYPE_VAR = 0
VAR_TYPE_ARR = 1
def __init__(self, addr, name, details, var_type):
self.addr = addr
self.name = name
self.details = details
self.type = self.VAR_TYPE_VAR if var_type == 'VAR' else self.VAR_TYPE_ARR
self._current_val = 0
self._set_val = 0
def current_val(self):
return self._current_val
def set_val(self, set_val):
self._set_val = set_val
if __name__ == "__main__":
test_list = [0] * 10
print(test_list)

10
pyqtgraph_test.py Normal file
View File

@ -0,0 +1,10 @@
import pyqtgraph as pg
import pyqtgraph.examples
pyqtgraph.examples.run()
# win = pg.GraphicsLayoutWidget(show=True)
#
# p2 = win.addPlot(title="test")
#
# pg.exec()

189
rnc_tunning.py Normal file
View File

@ -0,0 +1,189 @@
# -*- coding: utf-8 -*-
################################################################################
## Form generated from reading UI file 'form.ui'
##
## Created by: Qt User Interface Compiler version 6.6.1
##
## WARNING! All changes made in this file will be lost when recompiling UI file!
################################################################################
from PySide6.QtCore import (QCoreApplication, QMetaObject, QRect,)
from PySide6.QtWidgets import (QComboBox, QFrame, QGridLayout,
QHBoxLayout, QLabel, QLineEdit,
QMenuBar, QPushButton, QSizePolicy,
QSpacerItem, QStatusBar, QTableView, QTextEdit,
QVBoxLayout, QWidget)
class Ui_MainWindow(object):
def setupUi(self, MainWindow):
if not MainWindow.objectName():
MainWindow.setObjectName(u"MainWindow")
MainWindow.resize(743, 524)
self.centralwidget = QWidget(MainWindow)
self.centralwidget.setObjectName(u"centralwidget")
self.gridLayout = QGridLayout(self.centralwidget)
self.gridLayout.setObjectName(u"gridLayout")
self.verticalLayout_3 = QVBoxLayout()
self.verticalLayout_3.setObjectName(u"verticalLayout_3")
self.horizontalLayout_5 = QHBoxLayout()
self.horizontalLayout_5.setObjectName(u"horizontalLayout_5")
self.label_2 = QLabel(self.centralwidget)
self.label_2.setObjectName(u"label_2")
self.horizontalLayout_5.addWidget(self.label_2)
self.line = QFrame(self.centralwidget)
self.line.setObjectName(u"line")
self.line.setFrameShape(QFrame.VLine)
self.line.setFrameShadow(QFrame.Sunken)
self.horizontalLayout_5.addWidget(self.line)
self.label_3 = QLabel(self.centralwidget)
self.label_3.setObjectName(u"label_3")
self.horizontalLayout_5.addWidget(self.label_3)
self.comboBox_comports = QComboBox(self.centralwidget)
self.comboBox_comports.setObjectName(u"comboBox_comports")
self.horizontalLayout_5.addWidget(self.comboBox_comports)
self.label_4 = QLabel(self.centralwidget)
self.label_4.setObjectName(u"label_4")
self.horizontalLayout_5.addWidget(self.label_4)
self.lineEdit_baudrate = QLineEdit(self.centralwidget)
self.lineEdit_baudrate.setObjectName(u"lineEdit_baudrate")
self.horizontalLayout_5.addWidget(self.lineEdit_baudrate)
self.label_5 = QLabel(self.centralwidget)
self.label_5.setObjectName(u"label_5")
self.horizontalLayout_5.addWidget(self.label_5)
self.lineEdit_pollingInterval = QLineEdit(self.centralwidget)
self.lineEdit_pollingInterval.setObjectName(u"lineEdit_pollingInterval")
self.horizontalLayout_5.addWidget(self.lineEdit_pollingInterval)
self.pushButton_set = QPushButton(self.centralwidget)
self.pushButton_set.setObjectName(u"pushButton_set")
self.horizontalLayout_5.addWidget(self.pushButton_set)
self.horizontalSpacer_2 = QSpacerItem(40, 20, QSizePolicy.Expanding, QSizePolicy.Minimum)
self.horizontalLayout_5.addItem(self.horizontalSpacer_2)
self.horizontalLayout_5.setStretch(9, 1)
self.verticalLayout_3.addLayout(self.horizontalLayout_5)
self.horizontalLayout = QHBoxLayout()
self.horizontalLayout.setObjectName(u"horizontalLayout")
self.verticalLayout = QVBoxLayout()
self.verticalLayout.setObjectName(u"verticalLayout")
self.horizontalLayout_2 = QHBoxLayout()
self.horizontalLayout_2.setObjectName(u"horizontalLayout_2")
self.label = QLabel(self.centralwidget)
self.label.setObjectName(u"label")
self.horizontalLayout_2.addWidget(self.label)
self.lineEdit_filename = QLineEdit(self.centralwidget)
self.lineEdit_filename.setObjectName(u"lineEdit_filename")
self.horizontalLayout_2.addWidget(self.lineEdit_filename)
self.pushButton_loadfile = QPushButton(self.centralwidget)
self.pushButton_loadfile.setObjectName(u"pushButton_loadfile")
self.horizontalLayout_2.addWidget(self.pushButton_loadfile)
self.verticalLayout.addLayout(self.horizontalLayout_2)
self.tableView = QTableView(self.centralwidget)
self.tableView.setObjectName(u"tableView")
self.verticalLayout.addWidget(self.tableView)
self.horizontalLayout.addLayout(self.verticalLayout)
self.verticalLayout_2 = QVBoxLayout()
self.verticalLayout_2.setObjectName(u"verticalLayout_2")
self.horizontalLayout_4 = QHBoxLayout()
self.horizontalLayout_4.setObjectName(u"horizontalLayout_4")
self.pushButton_update = QPushButton(self.centralwidget)
self.pushButton_update.setObjectName(u"pushButton_update")
self.horizontalLayout_4.addWidget(self.pushButton_update)
self.pushButton_copy = QPushButton(self.centralwidget)
self.pushButton_copy.setObjectName(u"pushButton_copy")
self.horizontalLayout_4.addWidget(self.pushButton_copy)
self.horizontalSpacer = QSpacerItem(40, 20, QSizePolicy.Expanding, QSizePolicy.Minimum)
self.horizontalLayout_4.addItem(self.horizontalSpacer)
self.horizontalLayout_4.setStretch(2, 1)
self.verticalLayout_2.addLayout(self.horizontalLayout_4)
self.widget = QWidget(self.centralwidget)
self.widget.setObjectName(u"widget")
self.verticalLayout_2.addWidget(self.widget)
self.textEdit = QTextEdit(self.centralwidget)
self.textEdit.setObjectName(u"textEdit")
self.verticalLayout_2.addWidget(self.textEdit)
self.verticalLayout_2.setStretch(1, 4)
self.verticalLayout_2.setStretch(2, 1)
self.horizontalLayout.addLayout(self.verticalLayout_2)
self.horizontalLayout.setStretch(0, 1)
self.horizontalLayout.setStretch(1, 3)
self.verticalLayout_3.addLayout(self.horizontalLayout)
self.gridLayout.addLayout(self.verticalLayout_3, 0, 0, 1, 1)
MainWindow.setCentralWidget(self.centralwidget)
self.menubar = QMenuBar(MainWindow)
self.menubar.setObjectName(u"menubar")
self.menubar.setGeometry(QRect(0, 0, 743, 21))
MainWindow.setMenuBar(self.menubar)
self.statusbar = QStatusBar(MainWindow)
self.statusbar.setObjectName(u"statusbar")
MainWindow.setStatusBar(self.statusbar)
self.retranslateUi(MainWindow)
QMetaObject.connectSlotsByName(MainWindow)
# setupUi
def retranslateUi(self, MainWindow):
MainWindow.setWindowTitle(QCoreApplication.translate("MainWindow", u"MainWindow", None))
self.label_2.setText(QCoreApplication.translate("MainWindow", u"\u4e32\u53e3\u8bbe\u7f6e", None))
self.label_3.setText(QCoreApplication.translate("MainWindow", u"\u7aef\u53e3", None))
self.label_4.setText(QCoreApplication.translate("MainWindow", u"\u6ce2\u7279\u7387[bps]", None))
self.label_5.setText(QCoreApplication.translate("MainWindow", u"\u8f6e\u8be2\u95f4\u9694[ms]", None))
self.pushButton_set.setText(QCoreApplication.translate("MainWindow", u"\u8bbe\u5b9a", None))
self.label.setText(QCoreApplication.translate("MainWindow", u"\u53c2\u6570\u914d\u7f6e\u6587\u4ef6", None))
self.pushButton_loadfile.setText(QCoreApplication.translate("MainWindow", u"\u52a0\u8f7d\u6587\u4ef6", None))
self.pushButton_update.setText(QCoreApplication.translate("MainWindow", u"\u5237\u65b0", None))
self.pushButton_copy.setText(QCoreApplication.translate("MainWindow", u"\u590d\u5236\u4fe1\u606f", None))
# retranslateUi

1
test.brdata Normal file

File diff suppressed because one or more lines are too long

1
test.data Normal file

File diff suppressed because one or more lines are too long

1
test2.brdata Normal file

File diff suppressed because one or more lines are too long

171
ui_arr_details.py Normal file
View File

@ -0,0 +1,171 @@
# -*- coding: utf-8 -*-
################################################################################
## Form generated from reading UI file 'form.ui'
##
## Created by: Qt User Interface Compiler version 6.6.1
##
## WARNING! All changes made in this file will be lost when recompiling UI file!
################################################################################
from PySide6.QtCore import (QCoreApplication, QMetaObject)
from PySide6.QtWidgets import (QFormLayout, QGridLayout, QHBoxLayout, QLabel, QPushButton, QSizePolicy,
QSpacerItem, QTableWidget, QVBoxLayout,)
class Ui_Widget(object):
def setupUi(self, Widget):
if not Widget.objectName():
Widget.setObjectName(u"Widget")
Widget.resize(873, 609)
self.gridLayout = QGridLayout(Widget)
self.gridLayout.setObjectName(u"gridLayout")
self.verticalLayout = QVBoxLayout()
self.verticalLayout.setObjectName(u"verticalLayout")
self.formLayout = QFormLayout()
self.formLayout.setObjectName(u"formLayout")
self.label = QLabel(Widget)
self.label.setObjectName(u"label")
self.formLayout.setWidget(0, QFormLayout.LabelRole, self.label)
self.label_addr = QLabel(Widget)
self.label_addr.setObjectName(u"label_addr")
self.formLayout.setWidget(0, QFormLayout.FieldRole, self.label_addr)
self.label_4 = QLabel(Widget)
self.label_4.setObjectName(u"label_4")
self.formLayout.setWidget(1, QFormLayout.LabelRole, self.label_4)
self.label_length = QLabel(Widget)
self.label_length.setObjectName(u"label_length")
self.formLayout.setWidget(1, QFormLayout.FieldRole, self.label_length)
self.label_3 = QLabel(Widget)
self.label_3.setObjectName(u"label_3")
self.formLayout.setWidget(2, QFormLayout.LabelRole, self.label_3)
self.label_name = QLabel(Widget)
self.label_name.setObjectName(u"label_name")
self.formLayout.setWidget(2, QFormLayout.FieldRole, self.label_name)
self.label_2 = QLabel(Widget)
self.label_2.setObjectName(u"label_2")
self.formLayout.setWidget(3, QFormLayout.LabelRole, self.label_2)
self.label_5 = QLabel(Widget)
self.label_5.setObjectName(u"label_5")
self.formLayout.setWidget(4, QFormLayout.LabelRole, self.label_5)
self.horizontalLayout = QHBoxLayout()
self.horizontalLayout.setObjectName(u"horizontalLayout")
self.tableWidget_val = QTableWidget(Widget)
self.tableWidget_val.setObjectName(u"tableWidget_val")
self.horizontalLayout.addWidget(self.tableWidget_val)
self.verticalLayout_2 = QVBoxLayout()
self.verticalLayout_2.setObjectName(u"verticalLayout_2")
self.pushButton_read = QPushButton(Widget)
self.pushButton_read.setObjectName(u"pushButton_read")
self.verticalLayout_2.addWidget(self.pushButton_read)
self.pushButton_valplot = QPushButton(Widget)
self.pushButton_valplot.setObjectName(u"pushButton_valplot")
self.verticalLayout_2.addWidget(self.pushButton_valplot)
self.verticalSpacer = QSpacerItem(20, 40, QSizePolicy.Minimum, QSizePolicy.Expanding)
self.verticalLayout_2.addItem(self.verticalSpacer)
self.horizontalLayout.addLayout(self.verticalLayout_2)
self.horizontalSpacer = QSpacerItem(40, 20, QSizePolicy.Expanding, QSizePolicy.Minimum)
self.horizontalLayout.addItem(self.horizontalSpacer)
self.formLayout.setLayout(4, QFormLayout.FieldRole, self.horizontalLayout)
self.label_6 = QLabel(Widget)
self.label_6.setObjectName(u"label_6")
self.formLayout.setWidget(5, QFormLayout.LabelRole, self.label_6)
self.horizontalLayout_2 = QHBoxLayout()
self.horizontalLayout_2.setObjectName(u"horizontalLayout_2")
self.tableWidget_setval = QTableWidget(Widget)
self.tableWidget_setval.setObjectName(u"tableWidget_setval")
self.horizontalLayout_2.addWidget(self.tableWidget_setval)
self.verticalLayout_3 = QVBoxLayout()
self.verticalLayout_3.setObjectName(u"verticalLayout_3")
self.pushButton_4 = QPushButton(Widget)
self.pushButton_4.setObjectName(u"pushButton_4")
self.verticalLayout_3.addWidget(self.pushButton_4)
self.pushButton_setvalplot = QPushButton(Widget)
self.pushButton_setvalplot.setObjectName(u"pushButton_setvalplot")
self.verticalLayout_3.addWidget(self.pushButton_setvalplot)
self.verticalSpacer_2 = QSpacerItem(20, 40, QSizePolicy.Minimum, QSizePolicy.Expanding)
self.verticalLayout_3.addItem(self.verticalSpacer_2)
self.horizontalLayout_2.addLayout(self.verticalLayout_3)
self.horizontalSpacer_2 = QSpacerItem(40, 20, QSizePolicy.Expanding, QSizePolicy.Minimum)
self.horizontalLayout_2.addItem(self.horizontalSpacer_2)
self.formLayout.setLayout(5, QFormLayout.FieldRole, self.horizontalLayout_2)
self.label_details = QLabel(Widget)
self.label_details.setObjectName(u"label_details")
self.formLayout.setWidget(3, QFormLayout.FieldRole, self.label_details)
self.verticalLayout.addLayout(self.formLayout)
self.gridLayout.addLayout(self.verticalLayout, 0, 0, 1, 1)
self.retranslateUi(Widget)
QMetaObject.connectSlotsByName(Widget)
# setupUi
def retranslateUi(self, Widget):
Widget.setWindowTitle(QCoreApplication.translate("Widget", u"Widget", None))
self.label.setText(QCoreApplication.translate("Widget", u"\u53d8\u91cf\u5730\u5740", None))
self.label_addr.setText(QCoreApplication.translate("Widget", u"\u7a7a", None))
self.label_4.setText(QCoreApplication.translate("Widget", u"\u6570\u636e\u957f\u5ea6", None))
self.label_length.setText(QCoreApplication.translate("Widget", u"1", None))
self.label_3.setText(QCoreApplication.translate("Widget", u"\u53d8\u91cf\u540d\u79f0", None))
self.label_name.setText(QCoreApplication.translate("Widget", u"\u7a7a", None))
self.label_2.setText(QCoreApplication.translate("Widget", u"\u53d8\u91cf\u63cf\u8ff0", None))
self.label_5.setText(QCoreApplication.translate("Widget", u"\u5f53\u524d\u503c", None))
self.pushButton_read.setText(QCoreApplication.translate("Widget", u"Read", None))
self.pushButton_valplot.setText(QCoreApplication.translate("Widget", u"Plot", None))
self.label_6.setText(QCoreApplication.translate("Widget", u"\u8bbe\u5b9a\u503c", None))
self.pushButton_4.setText(QCoreApplication.translate("Widget", u"Write", None))
self.pushButton_setvalplot.setText(QCoreApplication.translate("Widget", u"Plot", None))
self.label_details.setText(QCoreApplication.translate("Widget", u"\u7a7a", None))
# retranslateUi

69
ui_basic_plot.py Normal file
View File

@ -0,0 +1,69 @@
# -*- coding: utf-8 -*-
################################################################################
## Form generated from reading UI file 'form.ui'
##
## Created by: Qt User Interface Compiler version 6.6.1
##
## WARNING! All changes made in this file will be lost when recompiling UI file!
################################################################################
from PySide6.QtCore import (QCoreApplication, QMetaObject)
from PySide6.QtWidgets import (QGridLayout, QHBoxLayout,
QLabel, QListView, QToolButton,
QVBoxLayout)
from pyqtgraph import GraphicsLayoutWidget
class Ui_Dialog(object):
def setupUi(self, Dialog):
if not Dialog.objectName():
Dialog.setObjectName(u"Dialog")
Dialog.resize(900, 400)
self.gridLayout = QGridLayout(Dialog)
self.gridLayout.setObjectName(u"gridLayout")
self.horizontalLayout = QHBoxLayout()
self.horizontalLayout.setSpacing(10)
self.horizontalLayout.setObjectName(u"horizontalLayout")
self.verticalLayout = QVBoxLayout()
self.verticalLayout.setObjectName(u"verticalLayout")
self.toolButton_operation = QToolButton(Dialog)
self.toolButton_operation.setObjectName(u"toolButton_operation")
self.verticalLayout.addWidget(self.toolButton_operation)
self.label = QLabel(Dialog)
self.label.setObjectName(u"label")
self.verticalLayout.addWidget(self.label)
self.listView = QListView(Dialog)
self.listView.setObjectName(u"listView")
self.verticalLayout.addWidget(self.listView)
self.horizontalLayout.addLayout(self.verticalLayout)
self.graphicsView = GraphicsLayoutWidget(Dialog)
self.graphicsView.setObjectName(u"graphicsView")
self.horizontalLayout.addWidget(self.graphicsView)
self.horizontalLayout.setStretch(0, 1)
self.horizontalLayout.setStretch(1, 5)
self.gridLayout.addLayout(self.horizontalLayout, 0, 0, 1, 1)
self.retranslateUi(Dialog)
QMetaObject.connectSlotsByName(Dialog)
# setupUi
def retranslateUi(self, Dialog):
Dialog.setWindowTitle(QCoreApplication.translate("Dialog", u"Dialog", None))
self.toolButton_operation.setText(QCoreApplication.translate("Dialog", u"\u64cd\u4f5c", None))
self.label.setText(QCoreApplication.translate("Dialog", u"Datasets", None))
# retranslateUi

106
ui_var_details.py Normal file
View File

@ -0,0 +1,106 @@
# -*- coding: utf-8 -*-
################################################################################
## Form generated from reading UI file 'form.ui'
##
## Created by: Qt User Interface Compiler version 6.6.1
##
## WARNING! All changes made in this file will be lost when recompiling UI file!
################################################################################
from PySide6.QtCore import (QCoreApplication, QMetaObject)
from PySide6.QtWidgets import (QFormLayout, QGridLayout, QHBoxLayout,
QLabel, QLineEdit, QPushButton, QSizePolicy,
QSpacerItem)
class Ui_Widget(object):
def setupUi(self, Widget):
if not Widget.objectName():
Widget.setObjectName(u"Widget")
Widget.resize(462, 540)
self.gridLayout = QGridLayout(Widget)
self.gridLayout.setObjectName(u"gridLayout")
self.formLayout = QFormLayout()
self.formLayout.setObjectName(u"formLayout")
self.label = QLabel(Widget)
self.label.setObjectName(u"label")
self.formLayout.setWidget(0, QFormLayout.LabelRole, self.label)
self.label_addr = QLabel(Widget)
self.label_addr.setObjectName(u"label_addr")
self.formLayout.setWidget(0, QFormLayout.FieldRole, self.label_addr)
self.label_3 = QLabel(Widget)
self.label_3.setObjectName(u"label_3")
self.formLayout.setWidget(1, QFormLayout.LabelRole, self.label_3)
self.label_name = QLabel(Widget)
self.label_name.setObjectName(u"label_name")
self.formLayout.setWidget(1, QFormLayout.FieldRole, self.label_name)
self.label_5 = QLabel(Widget)
self.label_5.setObjectName(u"label_5")
self.formLayout.setWidget(2, QFormLayout.LabelRole, self.label_5)
self.label_details = QLabel(Widget)
self.label_details.setObjectName(u"label_details")
self.formLayout.setWidget(2, QFormLayout.FieldRole, self.label_details)
self.label_7 = QLabel(Widget)
self.label_7.setObjectName(u"label_7")
self.formLayout.setWidget(3, QFormLayout.LabelRole, self.label_7)
self.horizontalLayout = QHBoxLayout()
self.horizontalLayout.setObjectName(u"horizontalLayout")
self.lineEdit_var = QLineEdit(Widget)
self.lineEdit_var.setObjectName(u"lineEdit_var")
self.horizontalLayout.addWidget(self.lineEdit_var)
self.pushButton_read = QPushButton(Widget)
self.pushButton_read.setObjectName(u"pushButton_read")
self.horizontalLayout.addWidget(self.pushButton_read)
self.pushButton_write = QPushButton(Widget)
self.pushButton_write.setObjectName(u"pushButton_write")
self.horizontalLayout.addWidget(self.pushButton_write)
self.horizontalSpacer = QSpacerItem(40, 20, QSizePolicy.Expanding, QSizePolicy.Minimum)
self.horizontalLayout.addItem(self.horizontalSpacer)
self.horizontalLayout.setStretch(3, 1)
self.formLayout.setLayout(3, QFormLayout.FieldRole, self.horizontalLayout)
self.gridLayout.addLayout(self.formLayout, 0, 0, 1, 1)
self.retranslateUi(Widget)
QMetaObject.connectSlotsByName(Widget)
# setupUi
def retranslateUi(self, Widget):
Widget.setWindowTitle(QCoreApplication.translate("Widget", u"Widget", None))
self.label.setText(QCoreApplication.translate("Widget", u"\u53d8\u91cf\u5730\u5740", None))
self.label_addr.setText(QCoreApplication.translate("Widget", u"1000", None))
self.label_3.setText(QCoreApplication.translate("Widget", u"\u53d8\u91cf\u540d\u79f0", None))
self.label_name.setText(QCoreApplication.translate("Widget", u"Test", None))
self.label_5.setText(QCoreApplication.translate("Widget", u"\u53d8\u91cf\u63cf\u8ff0", None))
self.label_details.setText(QCoreApplication.translate("Widget", u"Details", None))
self.label_7.setText(QCoreApplication.translate("Widget", u"\u6570\u503c", None))
self.pushButton_read.setText(QCoreApplication.translate("Widget", u"Read", None))
self.pushButton_write.setText(QCoreApplication.translate("Widget", u"Write", None))
# retranslateUi

0
新建 文本文档.txt Normal file
View File