优化了界面显示

This commit is contained in:
wangxibao 2025-01-25 11:13:39 +08:00
parent f86b9f0a65
commit 46e7114e95
7 changed files with 297 additions and 877 deletions

Binary file not shown.

View File

@ -27,6 +27,9 @@ class PyHexQT(QtWidgets.QWidget,Ui_Form):
self.bytes_length = int(config.get('NetConfig', 'bytes_length')) self.bytes_length = int(config.get('NetConfig', 'bytes_length'))
self.num_scale = int(config.get('NetConfig', 'num_scale')) self.num_scale = int(config.get('NetConfig', 'num_scale'))
self.log_time = int(config.get('NetConfig', 'log_time')) self.log_time = int(config.get('NetConfig', 'log_time'))
windowTitle = config.get('NetConfig', 'window_title')
self.setWindowTitle(windowTitle)
self.log_count = 0 self.log_count = 0
self.log_buffer = [] self.log_buffer = []
# 定时器接收数据 # 定时器接收数据
@ -55,6 +58,7 @@ class PyHexQT(QtWidgets.QWidget,Ui_Form):
try: try:
self.udp_socket.bind(udp_addr) self.udp_socket.bind(udp_addr)
print("开始监听。。。") print("开始监听。。。")
self.udp_socket.setblocking(False) #设置非阻塞
except Exception as e: except Exception as e:
print(f"Error reading configuration: {e}") print(f"Error reading configuration: {e}")
return None return None
@ -72,6 +76,8 @@ class PyHexQT(QtWidgets.QWidget,Ui_Form):
out_s = '' out_s = ''
out_s = ' '.join(['{:02X}'.format(b) for b in bytes.fromhex(line_utf8)]) out_s = ' '.join(['{:02X}'.format(b) for b in bytes.fromhex(line_utf8)])
# %% 在界面上更新
self.add_line_to_textedit(out_s)
# 获取到text光标 # 获取到text光标
textCursor = self.textEdit.textCursor() textCursor = self.textEdit.textCursor()
# 滚动到底部 # 滚动到底部
@ -79,11 +85,12 @@ class PyHexQT(QtWidgets.QWidget,Ui_Form):
# 设置光标到text中去 # 设置光标到text中去
self.textEdit.setTextCursor(textCursor) self.textEdit.setTextCursor(textCursor)
self.textEdit.insertPlainText(out_s) # self.textEdit.insertPlainText(out_s)
self.textEdit.insertPlainText('\r\n') # self.textEdit.insertPlainText('\r\n')
print("[From %s:%d]:%s" % (recv_data[1][0], recv_data[1][1], out_s)) print("[From %s:%d]:%s" % (recv_data[1][0], recv_data[1][1], out_s))
#%%保存数据到log
sav_str = datetime.datetime.now().strftime("%Y-%m-%dT%H:%M:%S.%f")[:23] +" " +out_s +"\r\n" sav_str = datetime.datetime.now().strftime("%Y-%m-%dT%H:%M:%S.%f")[:23] +" " +out_s +"\r\n"
#将数据加入缓存区域 #将数据加入缓存区域
self.log_buffer.append(sav_str) self.log_buffer.append(sav_str)
@ -92,13 +99,12 @@ class PyHexQT(QtWidgets.QWidget,Ui_Form):
if self.log_count>self.log_time: if self.log_count>self.log_time:
self.data_save() self.data_save()
#数据转化 #%% 数据转化,并显示在框中
num_hex_str = line_utf8[self.bytes_start*2:(self.bytes_start*2 +self.bytes_length*2 )] num_hex_str = line_utf8[self.bytes_start*2:(self.bytes_start*2 +self.bytes_length*2 )]
if num_hex_str:
num_out = int(num_hex_str,16)/self.num_scale num_out = int(num_hex_str,16)/self.num_scale
self.textBrowser.clear() self.textBrowser.clear()
# 设置字体和颜色 # 设置字体和颜色
char_format = QtGui.QTextCharFormat() char_format = QtGui.QTextCharFormat()
char_format.setFont(QtGui.QFont("SimSun", 28)) # 设置字体为 SimSun字号为 28 char_format.setFont(QtGui.QFont("SimSun", 28)) # 设置字体为 SimSun字号为 28
@ -106,6 +112,7 @@ class PyHexQT(QtWidgets.QWidget,Ui_Form):
# 创建 QTextCursor 对象 # 创建 QTextCursor 对象
cursor = self.textBrowser.textCursor() # 插入带有格式的文本 cursor = self.textBrowser.textCursor() # 插入带有格式的文本
cursor.insertText(str(num_out), char_format) cursor.insertText(str(num_out), char_format)
except socket.error as e: except socket.error as e:
#print(f"Socket error: {e}") #print(f"Socket error: {e}")
pass pass
@ -117,6 +124,18 @@ class PyHexQT(QtWidgets.QWidget,Ui_Form):
self.log_buffer.clear() self.log_buffer.clear()
self.log_count = 0 self.log_count = 0
def add_line_to_textedit(self, new_line):
# 获取当前文本并按行分割
current_lines = self.textEdit.toPlainText().splitlines()
# 添加新的行到列表中
current_lines.append(new_line)
# 如果行数超过100则删除最早的行直到剩下100行
if len(current_lines) > 100:
current_lines = current_lines[-100:] # 只保留最新的100行
# 将更新后的行列表转换回字符串并设置为textEdit的内容
self.textEdit.setPlainText('\n'.join(current_lines))
def CheckCfgIniData(self): def CheckCfgIniData(self):
if not os.path.exists(self.udp): if not os.path.exists(self.udp):
config = ConfigParser() config = ConfigParser()
@ -127,6 +146,7 @@ class PyHexQT(QtWidgets.QWidget,Ui_Form):
config.set('NetConfig', 'bytes_length', '4') config.set('NetConfig', 'bytes_length', '4')
config.set('NetConfig', 'num_scale', '1000') config.set('NetConfig', 'num_scale', '1000')
config.set('NetConfig', 'log_time', '1') config.set('NetConfig', 'log_time', '1')
config.set('NetConfig', 'window_title', 'Hex数据解调工具')
with open(self.udp, 'w', encoding='utf-8') as f: with open(self.udp, 'w', encoding='utf-8') as f:
config.write(f) config.write(f)

View File

@ -4,5 +4,6 @@ port = 9000
bytes_start = 3 bytes_start = 3
bytes_length = 4 bytes_length = 4
num_scale = 1000 num_scale = 1000
log_time= 10 log_time = 1
window_title = Hex数据解调工具

View File

@ -5,7 +5,7 @@ Created on Mon May 27 14:31:38 2024
@author: WANGXIBAO @author: WANGXIBAO
""" """
import sys import sys,os
import serial,re import serial,re
import serial.tools.list_ports import serial.tools.list_ports
import time,datetime import time,datetime
@ -13,28 +13,35 @@ import time,datetime
from PyQt5 import QtWidgets from PyQt5 import QtWidgets
from PyQt5.Qt import QPainter from PyQt5.Qt import QPainter
from PyQt5.QtWidgets import QMessageBox ,QFileDialog,QInputDialog from PyQt5.QtWidgets import QMessageBox ,QFileDialog,QInputDialog
from PyQt5.QtCore import QTimer ,Qt from PyQt5.QtCore import QTimer
from PyUartUi import Ui_UartAssistant from PyUartUi import Ui_UartAssistant
from UartDataPolt import QChartViewPlot,UpdateDataThread,GetDataQX,GetDataTF,GetDataOther from UartDataPolt import QChartViewPlot,UpdateDataThread,GetDataTF
from PyQt5.QtChart import QChartView from PyQt5.QtChart import QChartView
from PyQt5.QtGui import QIcon from PyQt5.QtGui import QIcon
from configparser import ConfigParser
class PyQt5Serial(QtWidgets.QWidget,Ui_UartAssistant): class PyQt5Serial(QtWidgets.QWidget,Ui_UartAssistant):
# %%初始化程序 # %%初始化程序
def __init__(self): def __init__(self):
super(PyQt5Serial, self).__init__() super(PyQt5Serial, self).__init__()
self.setupUi(self) self.setupUi(self)
self.quick_num = 99
self.IniPath = "PyUart.ini"
self.log_time = 10
self.log_buffer = {} #定义成一个字典,键--文件名,值--对于收到的字符串列表
self.qxCfg=()
self.tfCfg=()
self.otCfg=()
self.current_lines = [] #定义一个空列表,存储待显示数据
self.update_data_thread = UpdateDataThread() # 创建更新波形数据线程 self.update_data_thread = UpdateDataThread() # 创建更新波形数据线程
self.get_data_qx = GetDataQX()
self.get_data_qx.IndOfReturn(0) #根据数据特点给一个初始值
self.get_data_tf = GetDataTF() self.get_data_tf = GetDataTF()
self.get_data_tf.IndOfReturn(0) #根据数据特点给一个初始值 self.get_data_tf.IndOfReturn(0) #根据数据特点给一个初始值
self.get_data_other = GetDataOther()
self.get_data_other.IndOfReturn(0) #根据数据特点给一个初始值
self.init() self.init()
self.CheckCfgIniData() #更改按钮的文字
self.ser = serial.Serial() #创建一个空对象 self.ser = serial.Serial() #创建一个空对象
self.port_check() self.port_check()
@ -74,22 +81,13 @@ class PyQt5Serial(QtWidgets.QWidget,Ui_UartAssistant):
self.widget_6.hide() self.widget_6.hide()
#加载快捷指令的按键值 #加载快捷指令的按键值
for i in range(1, 21): # 假设有20个按钮
getattr(self, f'pushButtonQuick_{i}').setText(self.get_data_tf.buttons_config[i-1][2])
getattr(self, f'lineEditQuick_{i}').setText(self.get_data_tf.buttons_config[i-1][1])
# (
# lambda checked, line_edit=f'lineEditQuick_{i}': self.onPushButtonQuickClicked(line_edit)
# )
# 用于暂存接收的串口数据 # 用于暂存接收的串口数据
self.buffer = b'' self.buffer = b''
# 用于暂存解码数据 # 用于暂存解码数据
self.lineUtf8 = "" self.lineUtf8 = ""
# 用于标志是否开始存CSV # 用于标志是否开始存CSV
self.CsvFlag = 0 self.flag_draw = 0
self.double_click_timers = {} # 存储双击定时器
# ============================================================================= # =============================================================================
# def wheelEvent(self, event): # def wheelEvent(self, event):
# if self.plot_view.underMouse: # if self.plot_view.underMouse:
@ -122,10 +120,13 @@ class PyQt5Serial(QtWidgets.QWidget,Ui_UartAssistant):
self.port_close() self.port_close()
#关闭界面前保存快捷区域的命令和名称 #关闭界面前保存快捷区域的命令和名称
for i in range(20): # 假设有20个按钮 for i in range(self.quick_num): # 假设有20个按钮
button_name = f'Button{i:02}' # 格式化按钮名称,确保两位数 index_str = f"{i:02}" # 确保编号为两位数字形式
set_text = getattr(self, f'lineEditQuick_{i+1}').text()+ "|" + getattr(self, f'pushButtonQuick_{i+1}').text() lineEditName = f"lineEditQuick_{index_str}"
self.get_data_tf.SetCfgIniData(button_name, set_text) buttonName = f"pushButtonQuick_{index_str}" # 格式化按钮名称,确保两位数
button_name = f"button{index_str}"
set_text = getattr(self,lineEditName).text()+ "|" + getattr(self,buttonName).text()
self.SetCfgIniData(button_name, set_text)
@ -158,8 +159,8 @@ class PyQt5Serial(QtWidgets.QWidget,Ui_UartAssistant):
# 加载日志 # 加载日志
self.pushButtonLogLoad.clicked.connect(self.openfiles) self.pushButtonLogLoad.clicked.connect(self.openfiles)
# 跳转链接 # hexRecevie与savCsv的按键关联
#self.commandLinkButton1.clicked.connect(self.link) self.checkBoxHexReceive.stateChanged.connect(self.hex_link_savCsv)
# 清除发送按钮 # 清除发送按钮
self.pushButtonClearSend.clicked.connect(self.send_data_clear) self.pushButtonClearSend.clicked.connect(self.send_data_clear)
@ -180,20 +181,28 @@ class PyQt5Serial(QtWidgets.QWidget,Ui_UartAssistant):
# 快捷指令扩展区域 # 快捷指令扩展区域
self.pushButton_expend.clicked.connect(self.adjust_sidebar) self.pushButton_expend.clicked.connect(self.adjust_sidebar)
# 创建一个通用的槽函数来处理所有按钮 # 创建一个通用的槽函数来处理所有按钮
# 例如使用lambda表达式传递额外的参数 # 动态创建控件并存储引用
for i in range(1, 21): # 假设有20个按钮 for i in range(self.quick_num): # 从0到20
# getattr(self, f'pushButtonQuick_{i}').clicked.connect( index_str = f"{i:02}" # 确保编号为两位数字形式
# lambda checked, line_edit=f'lineEditQuick_{i}': self.onPushButtonQuickClicked(line_edit) horizontalLayoutName = f"horizontalLayoutQuick_{index_str}"
# ) horizontalLayout = QtWidgets.QHBoxLayout()
# 连接左键点击事件 horizontalLayout.setObjectName(horizontalLayoutName)
button = getattr(self, f'pushButtonQuick_{i}')
line_edit = f'lineEditQuick_{i}'
button.clicked.connect(lambda checked, line_edit=line_edit: self.onPushButtonQuickClicked(line_edit))
# 连接右键点击事件 # 创建 QLineEdit 并设置动态属性
button_id = f'pushButtonQuick_{i}' lineEditName = f"lineEditQuick_{index_str}"
button.setContextMenuPolicy(Qt.CustomContextMenu) setattr(self, lineEditName, QtWidgets.QLineEdit(self.layoutWidget1))
button.customContextMenuRequested.connect(lambda position, button_id=button_id: self.onButtonRightClicked(button_id)) getattr(self, lineEditName).setObjectName(lineEditName)
horizontalLayout.addWidget(getattr(self, lineEditName))
# 创建 QPushButton 并设置动态属性
buttonName = f"pushButtonQuick_{index_str}"
setattr(self, buttonName, QtWidgets.QPushButton(self.layoutWidget1))
getattr(self, buttonName).setObjectName(buttonName)
horizontalLayout.addWidget(getattr(self, buttonName))
self.verticalLayout_8.addLayout(horizontalLayout)
# 连接按钮点击事件到槽函数
button = getattr(self, buttonName)
if button:
button.clicked.connect(lambda checked, idx=i: self.onButtonClick(idx))
# %% 串口检测 # %% 串口检测
def port_check(self): def port_check(self):
@ -213,7 +222,7 @@ class PyQt5Serial(QtWidgets.QWidget,Ui_UartAssistant):
def port_open(self): def port_open(self):
self.ser.port = self.comboBoxSerial.currentText() # 串口号 self.ser.port = self.comboBoxSerial.currentText() # 串口号
self.ser.baudrate = int(self.comboBoxBaudrate.currentText()) # 波特率 self.ser.baudrate = int(self.comboBoxBaudrate.currentText()) # 波特率
self.ser.timeout = 0.01 self.ser.timeout = 0.001
@ -304,23 +313,26 @@ class PyQt5Serial(QtWidgets.QWidget,Ui_UartAssistant):
if self.checkBoxAddDate.isChecked(): if self.checkBoxAddDate.isChecked():
nowTime = datetime.datetime.now().strftime("%Y-%m-%d %H:%M:%S.%f") nowTime = datetime.datetime.now().strftime("%Y-%m-%d %H:%M:%S.%f")
nowTime = nowTime[:-3] nowTime = nowTime[:-3]
self.textEditReceive.insertPlainText(nowTime + " ") #self.textEditReceive.insertPlainText(nowTime + " ")
self.add_line_to_textedit(nowTime + " ")
# HEX显示数据 # HEX显示数据
if self.checkBoxHexReceive.checkState(): if self.checkBoxHexReceive.checkState():
out_s = '' out_s = ''
for i in range(0, len(data)): for i in range(0, len(data)):
out_s = out_s + '{:02X}'.format(data[i]) + ' ' out_s = out_s + '{:02X}'.format(data[i]) + ' '
self.textEditReceive.insertPlainText(out_s) #self.textEditReceive.insertPlainText(out_s)
self.add_line_to_textedit(out_s)
# ASCII显示数据 # ASCII显示数据
else: else:
#print("解码前",datetime.datetime.now().strftime("%Y-%m-%d %H:%M:%S.%f")) #print("解码前",datetime.datetime.now().strftime("%Y-%m-%d %H:%M:%S.%f"))
self.textEditReceive.insertPlainText(data.decode('utf-8',errors='replace')) #self.textEditReceive.insertPlainText(data.decode('utf-8',errors='replace'))
self.add_line_to_textedit(data.decode('utf-8',errors='replace'))
#print("解码数据",datetime.datetime.now().strftime("%Y-%m-%d %H:%M:%S.%f")) #print("解码数据",datetime.datetime.now().strftime("%Y-%m-%d %H:%M:%S.%f"))
# 接收换行 # 接收换行
if self.checkBoxCRLF.isChecked(): if self.checkBoxCRLF.isChecked():
self.textEditReceive.insertPlainText('\r\n') #self.textEditReceive.insertPlainText('\r\n')
self.add_line_to_textedit('\r\n')
# 获取到text光标 # 获取到text光标
textCursor = self.textEditReceive.textCursor() textCursor = self.textEditReceive.textCursor()
@ -422,7 +434,7 @@ class PyQt5Serial(QtWidgets.QWidget,Ui_UartAssistant):
self.textEditReceive.insertPlainText(out_s) self.textEditReceive.insertPlainText(out_s)
# ASCII接收显示 # ASCII接收显示
else: else:
self.textEditReceive.insertPlainText(input_s.decode('utf-8')) self.textEditReceive.insertPlainText(input_s.decode('utf-8',errors='replace'))
# 接收换行 # 接收换行
if self.checkBoxCRLF.isChecked(): if self.checkBoxCRLF.isChecked():
@ -483,48 +495,48 @@ class PyQt5Serial(QtWidgets.QWidget,Ui_UartAssistant):
# 注意:每行数据可能不包含结尾的换行符,所以在处理前检查一下 # 注意:每行数据可能不包含结尾的换行符,所以在处理前检查一下
if line.endswith(b'\r'): if line.endswith(b'\r'):
line = line[:-1] # 移除回车 line = line[:-1] # 移除回车
# 写入当前日期的文件,打开文件,如果文件不存在则创建,如果存在则追加内容 if self.checkBoxHexReceive.checkState():
lineUtf8 = line.hex()
out_s = ' '.join(['{:02X}'.format(b) for b in bytes.fromhex(lineUtf8)])
saveData = datetime.datetime.now().strftime("%Y-%m-%dT%H:%M:%S.%f")[:23] +" " +out_s +"\r\n"
else:
lineUtf8 = line.decode('utf-8',errors='replace')
saveData = (time.strftime("%Y-%m-%d %H:%M:%S", time.localtime())) + " " + lineUtf8 + "\r\n"
# 将日志信息添加到缓冲区
if self.filename not in self.log_buffer:
self.log_buffer[self.filename] = []
self.log_buffer[self.filename].append(saveData)
# 当缓冲区中的记录达到10条时写入文件
if len(self.log_buffer[self.filename]) >= self.log_time:
with open(self.filename, mode='a', newline='',encoding='utf-8', errors='replace') as file:
file.writelines(self.log_buffer[self.filename])
self.log_buffer[self.filename].clear()
with open(self.filename, 'a', encoding='utf-8',newline='') as file:
#print (data.decode('utf-8'))
self.lineUtf8 = line.decode('utf-8')
saveData = (time.strftime("%Y-%m-%d %H:%M:%S", time.localtime())) + " " + self.lineUtf8 + "\r\n"
#print("saveData:",saveData)
file.write(saveData) # 写入内容
#判断选择的何种格式数据 #判断选择的何种格式数据
if self.radioButtonCH4QX.isChecked() and self.lineUtf8[:2]=="A+": if self.radioButtonCH4QX.isChecked():
print(self.lineUtf8) self.get_data_tf.SetConfig(self.qxCfg)
if self.radioButtonCH4TF.isChecked():
self.get_data_tf.SetConfig(self.tfCfg)
if self.radioButtonOtherData.isChecked():
self.get_data_tf.SetConfig(self.otCfg)
dataSplit = self.get_data_qx.Transdata(self.lineUtf8) print(lineUtf8)
self.filenameCsv= self.file + ".csv"
if self.checkBoxAutoSaveCsv.isChecked() and self.CsvFlag: #写入CSV文件
try:
self.get_data_qx.SaveCsv(self.filenameCsv)
except:
print("写入CSV失败")
pass
self.update_data_thread.SetFlag(1) if self.flag_draw:
self.update_data_thread.SetReceiveData(dataSplit)
#更新当前数据
self.lineEditCurrentValue.setText(str(round(dataSplit,3)))
self.lineEditWindowMean.setText (str(round(self.plot_qchart.windowAverage,3)))
self.lineEditWindowMSE.setText (str(round(self.plot_qchart.windowStd,3)))
#print(dataSplit)
#print("接收发数",datetime.datetime.now().strftime("%Y-%m-%d %H:%M:%S.%f"))
elif self.radioButtonCH4TF.isChecked() :
print(self.lineUtf8)
dataSplit = self.get_data_tf.Transdata(self.lineUtf8) dataSplit = self.get_data_tf.Transdata(lineUtf8)
#print("dataSplit",type(dataSplit)) #print("dataSplit",type(dataSplit))
if isinstance(dataSplit, (float, int)): if isinstance(dataSplit, (float, int)):
self.filenameCsv= self.file + ".csv" self.filenameCsv= self.file + ".csv"
if self.checkBoxAutoSaveCsv.isChecked() and self.CsvFlag: #写入CSV文件 if self.checkBoxAutoSaveCsv.isChecked(): #写入CSV文件
try: try:
self.get_data_tf.SaveCsv(self.filenameCsv) self.get_data_tf.SaveCsv(self.filenameCsv,self.log_time)
except: except:
print("写入CSV失败") print("写入CSV失败")
pass pass
@ -537,31 +549,7 @@ class PyQt5Serial(QtWidgets.QWidget,Ui_UartAssistant):
self.lineEditWindowMean.setText (str(round(self.plot_qchart.windowAverage,3))) self.lineEditWindowMean.setText (str(round(self.plot_qchart.windowAverage,3)))
self.lineEditWindowMSE.setText (str(round(self.plot_qchart.windowStd,3))) self.lineEditWindowMSE.setText (str(round(self.plot_qchart.windowStd,3)))
else: else:
print("dataSplit type:",type(dataSplit)) print("Data split failed, dataSplit type:",type(dataSplit))
elif self.radioButtonOtherData.isChecked() :
print(self.lineUtf8)
dataSplit = self.get_data_other.Transdata(self.lineUtf8)
#print("dataSplit",type(dataSplit))
if isinstance(dataSplit, (float, int)):
self.filenameCsv= self.file + ".csv"
if self.checkBoxAutoSaveCsv.isChecked() and self.CsvFlag: #写入CSV文件
try:
self.get_data_other.SaveCsv(self.filenameCsv)
except:
print("写入CSV失败")
pass
self.update_data_thread.SetFlag(1)
#print("dataSplit",dataSplit)
self.update_data_thread.SetReceiveData(dataSplit)
#更新当前数据
self.lineEditCurrentValue.setText(str(round(dataSplit,3)))
self.lineEditWindowMean.setText (str(round(self.plot_qchart.windowAverage,3)))
self.lineEditWindowMSE.setText (str(round(self.plot_qchart.windowStd,3)))
else:
print("dataSplit type:",type(dataSplit))
except Exception as e: except Exception as e:
print(f"Error reading configuration: {e}") print(f"Error reading configuration: {e}")
@ -581,7 +569,25 @@ class PyQt5Serial(QtWidgets.QWidget,Ui_UartAssistant):
self.data_num_received = 0 self.data_num_received = 0
self.lineEditSendNum.setText(str(self.data_num_received)) self.lineEditSendNum.setText(str(self.data_num_received))
# 关联hex接收与保存csvhex下不保存csv
def hex_link_savCsv(self):
if self.checkBoxHexReceive.isChecked():
self.checkBoxAutoSaveCsv.setChecked(False)
else:
self.checkBoxAutoSaveCsv.setChecked(True)
#设置接受区域显示条数
def add_line_to_textedit(self, new_line):
# 获取当前文本并按行分割
#current_lines = self.textEditReceive.toPlainText().splitlines()
# 添加新的行到列表中
self.current_lines.append(new_line)
# 如果行数超过100则删除最早的行直到剩下100行
if len(self.current_lines) > 1000:
self.current_lines = self.current_lines[-1000:] # 只保留最新的100行
# 将更新后的行列表转换回字符串并设置为textEdit的内容
self.textEditReceive.setPlainText(''.join(self.current_lines))
#self.textEditReceive.setPlainText(self.current_lines)
# 关闭串口 # 关闭串口
def port_close(self): def port_close(self):
try: try:
@ -607,6 +613,7 @@ class PyQt5Serial(QtWidgets.QWidget,Ui_UartAssistant):
self.lineEditReceiveNum.setText(str(self.data_num_received)) self.lineEditReceiveNum.setText(str(self.data_num_received))
#self.formGroupBox1.setTitle("串口状态(关闭)") #self.formGroupBox1.setTitle("串口状态(关闭)")
#开始绘图
def btn_start_clicked(self): def btn_start_clicked(self):
#开启按钮 #开启按钮
@ -620,28 +627,18 @@ class PyQt5Serial(QtWidgets.QWidget,Ui_UartAssistant):
self.radioButtonOtherData.setEnabled(False) self.radioButtonOtherData.setEnabled(False)
self.checkBoxAutoSaveCsv.setEnabled(True) self.checkBoxAutoSaveCsv.setEnabled(True)
if self.radioButtonCH4QX.isChecked():
self.comboBoxPlot.addItems(["甲烷浓度","环境温度","激光器温度","激光强度"])
self.comboBoxPlot.setCurrentText("甲烷浓度")
self.get_data_qx.IndOfReturn(0)
elif self.radioButtonCH4TF.isChecked():
iterm = self.get_data_tf.rowTitle[1:] iterm = self.get_data_tf.rowTitle[1:]
print("iterm",iterm) print("iterm",iterm)
self.comboBoxPlot.addItems(iterm) self.comboBoxPlot.addItems(iterm)
elif self.radioButtonOtherData.isChecked(): self.update_data_thread.SetPlotItem(0)
iterm = self.get_data_other.rowTitle[1:]
print("iterm",iterm)
self.comboBoxPlot.addItems(iterm)
#self.update_data_thread.SetPlotItem(0)
self.update_data_thread.restart() self.update_data_thread.restart()
self.CsvFlag = 1 self.flag_draw = 1
#停止绘图
def btn_stop_clicked(self): def btn_stop_clicked(self):
self.update_data_thread.stop() self.update_data_thread.stop()
self.pushButtonStartPlot.setEnabled(True) self.pushButtonStartPlot.setEnabled(True)
@ -651,7 +648,7 @@ class PyQt5Serial(QtWidgets.QWidget,Ui_UartAssistant):
self.radioButtonOtherData.setEnabled(True) self.radioButtonOtherData.setEnabled(True)
self.checkBoxAutoSaveCsv.setEnabled(False) self.checkBoxAutoSaveCsv.setEnabled(False)
self.comboBoxPlot.clear() self.comboBoxPlot.clear()
self.CsvFlag = 0 self.flag_draw = 0
def update_data_thread_slot(self, data): def update_data_thread_slot(self, data):
# 线程回调函数 # 线程回调函数
@ -662,11 +659,7 @@ class PyQt5Serial(QtWidgets.QWidget,Ui_UartAssistant):
def plot_item_changed(self,index): def plot_item_changed(self,index):
print(index) print(index)
self.plot_qchart.clearSeries() self.plot_qchart.clearSeries()
#self.update_data_thread.SetPlotItem(index)
self.get_data_qx.IndOfReturn(index)
#self.plot_qchart.series.replace([])
self.get_data_tf.IndOfReturn(index) self.get_data_tf.IndOfReturn(index)
self.get_data_other.IndOfReturn(index)
def plot_reset(self): def plot_reset(self):
self.plot_qchart.zoomReset() self.plot_qchart.zoomReset()
@ -683,14 +676,109 @@ class PyQt5Serial(QtWidgets.QWidget,Ui_UartAssistant):
text = text + "\r\n" text = text + "\r\n"
self.data_send(text) self.data_send(text)
def onButtonRightClicked(self, button_id):
# 弹出一个对话框让用户输入新的按钮名称 def CheckCfgIniData(self):
button = getattr(self, button_id) if not os.path.exists(self.IniPath):
config = ConfigParser()
#数据处理正则表达
config.add_section('QX_config')
config.set('QX_config', 'regular', '\+?-?\d+(?:\.\d+)?')
config.set('QX_config', 'headStr', 'A+')
config.set('QX_config', 'rowTitle', 'time,Methane,Air Temp,Laser Temp,Laser Intensity')
config.add_section('TF_config')
config.set('TF_config', 'regular', '\+?-?\d+(?:\.\d+)?')
config.set('TF_config', 'headStr', 'A+')
config.set('TF_config', 'rowTitle', 'time,Methane,Air Temp,Laser Temp,Laser Intensity,amplification,NL,ND,Sinal,SNR,PEAK,Best Piont')
config.add_section('OtherData_config')
config.set('OtherData_config', 'regular', '\+?-?\d+(?:\.\d+)?')
# config.set('TF_config', 'regular', '(A\+|B\+|\s)+')
config.set('OtherData_config', 'headStr', 'A+')
config.set('OtherData_config', 'rowTitle', 'time,DATA1,DATA2')
#按键配置
config.add_section('Quick_config')
config.set('Quick_config', 'log_time', '10')
for i in range(self.quick_num):
idx = f'{i:02}'
button_name = f'Button{idx}' # 格式化按钮名称,确保两位数
config.set('Quick_config', button_name, '')
with open(self.IniPath, 'w' ,encoding='utf-8') as f:
config.write(f)
config = ConfigParser()
config.read(self.IniPath, encoding='utf-8')
try:
# 创建一个空字典来存储按钮名称和对应的配置
self.log_time = int(config.get('Quick_config', 'log_time'))
self.qxCfg = (config.get('QX_config','regular'),config.get('QX_config','headStr'),config.get('QX_config','rowTitle'))
print('Quick_config:',self.qxCfg)
self.tfCfg = (config.get('TF_config','regular'),config.get('TF_config','headStr'),config.get('TF_config','rowTitle'))
print('TF_config:',self.tfCfg)
self.otCfg = (config.get('OtherData_config','regular'),config.get('OtherData_config','headStr'),config.get('OtherData_config','rowTitle'))
print('OtherData_config:',self.otCfg)
# 循环遍历按钮编号从0到19
for i in range(self.quick_num):
idx = f'{i:02}'
button_name = f'Button{idx}' # 格式化按钮名称,确保两位数
# 使用 get 方法安全地获取配置,如果不存在则返回空字符串
config_value = config.get('Quick_config', button_name, fallback='')
config_value_split = config_value.split('|')
# 将按钮名称和配置信息存储在字典中
if len(config_value_split) == 2:
# 打印字典查看结果,并赋值
print(button_name,config_value_split[0],config_value_split[1])
getattr(self, f'pushButtonQuick_{idx}').setText(config_value_split[1])
getattr(self, f'lineEditQuick_{idx}').setText(config_value_split[0])
except Exception as e:
print(f"Error reading configuration: {e}")
def SetCfgIniData(self,button_name,set_text):
config = ConfigParser()
config.read(self.IniPath, encoding='utf-8')
config.set('Quick_config', button_name, set_text)
with open(self.IniPath, 'w' ,encoding='utf-8') as f:
config.write(f)
def onButtonClick(self, idx):
# 槽函数处理按钮点击事件
if idx not in self.double_click_timers:
self.double_click_timers[idx] = None
if self.double_click_timers[idx] is None:
self.double_click_timers[idx] = True
QTimer.singleShot(200, lambda: self.onButtonSigleClick(idx))
else:
self.onButtonDoubleClick(idx)
def onButtonSigleClick(self, idx):
index_str = f"{idx:02}"
if self.double_click_timers[idx]:
self.double_click_timers[idx] = None
lineEdit = getattr(self, f"lineEditQuick_{index_str}")
print(f"Text in lineEdit_{idx}: {lineEdit.text()}")
text = lineEdit.text()
if self.checkBox_return.isChecked():
text = text + "\r\n"
self.data_send(text)
def onButtonDoubleClick(self, idx):
# 槽函数处理按钮双击事件
self.double_click_timers[idx] = None
index_str = f"{idx:02}"
print(f"Double click detected on Button {index_str}.")
button = getattr(self, f"pushButtonQuick_{index_str}")
new_name, ok = QInputDialog.getText(self, 'Button Rename', 'Enter new button name:') new_name, ok = QInputDialog.getText(self, 'Button Rename', 'Enter new button name:')
if ok and new_name: if ok and new_name:
button.setText(new_name) button.setText(new_name)
#执行 #执行
if __name__ == '__main__': if __name__ == '__main__':
app = QtWidgets.QApplication(sys.argv) app = QtWidgets.QApplication(sys.argv)

View File

@ -14,7 +14,7 @@ from PyQt5 import QtCore, QtGui, QtWidgets
class Ui_UartAssistant(object): class Ui_UartAssistant(object):
def setupUi(self, UartAssistant): def setupUi(self, UartAssistant):
UartAssistant.setObjectName("UartAssistant") UartAssistant.setObjectName("UartAssistant")
UartAssistant.resize(996, 694) UartAssistant.resize(999, 694)
sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Expanding, QtWidgets.QSizePolicy.Expanding) sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Expanding, QtWidgets.QSizePolicy.Expanding)
sizePolicy.setHorizontalStretch(2) sizePolicy.setHorizontalStretch(2)
sizePolicy.setVerticalStretch(0) sizePolicy.setVerticalStretch(0)
@ -430,7 +430,7 @@ class Ui_UartAssistant(object):
self.scrollArea.setWidgetResizable(False) self.scrollArea.setWidgetResizable(False)
self.scrollArea.setObjectName("scrollArea") self.scrollArea.setObjectName("scrollArea")
self.scrollAreaWidgetContents = QtWidgets.QWidget() self.scrollAreaWidgetContents = QtWidgets.QWidget()
self.scrollAreaWidgetContents.setGeometry(QtCore.QRect(0, 0, 241, 1000)) self.scrollAreaWidgetContents.setGeometry(QtCore.QRect(0, 0, 241, 3000))
self.scrollAreaWidgetContents.setObjectName("scrollAreaWidgetContents") self.scrollAreaWidgetContents.setObjectName("scrollAreaWidgetContents")
self.widget_8 = QtWidgets.QWidget(self.scrollAreaWidgetContents) self.widget_8 = QtWidgets.QWidget(self.scrollAreaWidgetContents)
self.widget_8.setGeometry(QtCore.QRect(12, 2, 221, 34)) self.widget_8.setGeometry(QtCore.QRect(12, 2, 221, 34))
@ -446,194 +446,14 @@ class Ui_UartAssistant(object):
self.checkBox_return.setObjectName("checkBox_return") self.checkBox_return.setObjectName("checkBox_return")
self.horizontalLayout_17.addWidget(self.checkBox_return) self.horizontalLayout_17.addWidget(self.checkBox_return)
self.widget_9 = QtWidgets.QWidget(self.scrollAreaWidgetContents) self.widget_9 = QtWidgets.QWidget(self.scrollAreaWidgetContents)
self.widget_9.setGeometry(QtCore.QRect(12, 42, 236, 1000)) self.widget_9.setGeometry(QtCore.QRect(12, 42, 231, 3000))
self.widget_9.setObjectName("widget_9") self.widget_9.setObjectName("widget_9")
self.layoutWidget2 = QtWidgets.QWidget(self.widget_9) self.layoutWidget2 = QtWidgets.QWidget(self.widget_9)
self.layoutWidget2.setGeometry(QtCore.QRect(12, 12, 218, 616)) self.layoutWidget2.setGeometry(QtCore.QRect(12, 12, 201, 2801))
self.layoutWidget2.setObjectName("layoutWidget2") self.layoutWidget2.setObjectName("layoutWidget2")
self.verticalLayout_8 = QtWidgets.QVBoxLayout(self.layoutWidget2) self.verticalLayout_8 = QtWidgets.QVBoxLayout(self.layoutWidget2)
self.verticalLayout_8.setContentsMargins(0, 0, 0, 0) self.verticalLayout_8.setContentsMargins(0, 0, 0, 0)
self.verticalLayout_8.setObjectName("verticalLayout_8") self.verticalLayout_8.setObjectName("verticalLayout_8")
self.horizontalLayoutQuick_1 = QtWidgets.QHBoxLayout()
self.horizontalLayoutQuick_1.setObjectName("horizontalLayoutQuick_1")
self.lineEditQuick_1 = QtWidgets.QLineEdit(self.layoutWidget2)
self.lineEditQuick_1.setObjectName("lineEditQuick_1")
self.horizontalLayoutQuick_1.addWidget(self.lineEditQuick_1)
self.pushButtonQuick_1 = QtWidgets.QPushButton(self.layoutWidget2)
self.pushButtonQuick_1.setObjectName("pushButtonQuick_1")
self.horizontalLayoutQuick_1.addWidget(self.pushButtonQuick_1)
self.verticalLayout_8.addLayout(self.horizontalLayoutQuick_1)
self.horizontalLayoutQuick_2 = QtWidgets.QHBoxLayout()
self.horizontalLayoutQuick_2.setObjectName("horizontalLayoutQuick_2")
self.lineEditQuick_2 = QtWidgets.QLineEdit(self.layoutWidget2)
self.lineEditQuick_2.setObjectName("lineEditQuick_2")
self.horizontalLayoutQuick_2.addWidget(self.lineEditQuick_2)
self.pushButtonQuick_2 = QtWidgets.QPushButton(self.layoutWidget2)
self.pushButtonQuick_2.setObjectName("pushButtonQuick_2")
self.horizontalLayoutQuick_2.addWidget(self.pushButtonQuick_2)
self.verticalLayout_8.addLayout(self.horizontalLayoutQuick_2)
self.horizontalLayoutQuick_3 = QtWidgets.QHBoxLayout()
self.horizontalLayoutQuick_3.setObjectName("horizontalLayoutQuick_3")
self.lineEditQuick_3 = QtWidgets.QLineEdit(self.layoutWidget2)
self.lineEditQuick_3.setObjectName("lineEditQuick_3")
self.horizontalLayoutQuick_3.addWidget(self.lineEditQuick_3)
self.pushButtonQuick_3 = QtWidgets.QPushButton(self.layoutWidget2)
self.pushButtonQuick_3.setObjectName("pushButtonQuick_3")
self.horizontalLayoutQuick_3.addWidget(self.pushButtonQuick_3)
self.verticalLayout_8.addLayout(self.horizontalLayoutQuick_3)
self.horizontalLayoutQuick_4 = QtWidgets.QHBoxLayout()
self.horizontalLayoutQuick_4.setObjectName("horizontalLayoutQuick_4")
self.lineEditQuick_4 = QtWidgets.QLineEdit(self.layoutWidget2)
self.lineEditQuick_4.setObjectName("lineEditQuick_4")
self.horizontalLayoutQuick_4.addWidget(self.lineEditQuick_4)
self.pushButtonQuick_4 = QtWidgets.QPushButton(self.layoutWidget2)
self.pushButtonQuick_4.setObjectName("pushButtonQuick_4")
self.horizontalLayoutQuick_4.addWidget(self.pushButtonQuick_4)
self.verticalLayout_8.addLayout(self.horizontalLayoutQuick_4)
self.horizontalLayoutQuick_5 = QtWidgets.QHBoxLayout()
self.horizontalLayoutQuick_5.setObjectName("horizontalLayoutQuick_5")
self.lineEditQuick_5 = QtWidgets.QLineEdit(self.layoutWidget2)
self.lineEditQuick_5.setObjectName("lineEditQuick_5")
self.horizontalLayoutQuick_5.addWidget(self.lineEditQuick_5)
self.pushButtonQuick_5 = QtWidgets.QPushButton(self.layoutWidget2)
self.pushButtonQuick_5.setObjectName("pushButtonQuick_5")
self.horizontalLayoutQuick_5.addWidget(self.pushButtonQuick_5)
self.verticalLayout_8.addLayout(self.horizontalLayoutQuick_5)
self.horizontalLayoutQuick_6 = QtWidgets.QHBoxLayout()
self.horizontalLayoutQuick_6.setObjectName("horizontalLayoutQuick_6")
self.lineEditQuick_6 = QtWidgets.QLineEdit(self.layoutWidget2)
self.lineEditQuick_6.setObjectName("lineEditQuick_6")
self.horizontalLayoutQuick_6.addWidget(self.lineEditQuick_6)
self.pushButtonQuick_6 = QtWidgets.QPushButton(self.layoutWidget2)
self.pushButtonQuick_6.setObjectName("pushButtonQuick_6")
self.horizontalLayoutQuick_6.addWidget(self.pushButtonQuick_6)
self.verticalLayout_8.addLayout(self.horizontalLayoutQuick_6)
self.horizontalLayoutQuick_7 = QtWidgets.QHBoxLayout()
self.horizontalLayoutQuick_7.setObjectName("horizontalLayoutQuick_7")
self.lineEditQuick_7 = QtWidgets.QLineEdit(self.layoutWidget2)
self.lineEditQuick_7.setObjectName("lineEditQuick_7")
self.horizontalLayoutQuick_7.addWidget(self.lineEditQuick_7)
self.pushButtonQuick_7 = QtWidgets.QPushButton(self.layoutWidget2)
self.pushButtonQuick_7.setObjectName("pushButtonQuick_7")
self.horizontalLayoutQuick_7.addWidget(self.pushButtonQuick_7)
self.verticalLayout_8.addLayout(self.horizontalLayoutQuick_7)
self.horizontalLayoutQuick_8 = QtWidgets.QHBoxLayout()
self.horizontalLayoutQuick_8.setObjectName("horizontalLayoutQuick_8")
self.lineEditQuick_8 = QtWidgets.QLineEdit(self.layoutWidget2)
self.lineEditQuick_8.setObjectName("lineEditQuick_8")
self.horizontalLayoutQuick_8.addWidget(self.lineEditQuick_8)
self.pushButtonQuick_8 = QtWidgets.QPushButton(self.layoutWidget2)
self.pushButtonQuick_8.setObjectName("pushButtonQuick_8")
self.horizontalLayoutQuick_8.addWidget(self.pushButtonQuick_8)
self.verticalLayout_8.addLayout(self.horizontalLayoutQuick_8)
self.horizontalLayoutQuick_9 = QtWidgets.QHBoxLayout()
self.horizontalLayoutQuick_9.setObjectName("horizontalLayoutQuick_9")
self.lineEditQuick_9 = QtWidgets.QLineEdit(self.layoutWidget2)
self.lineEditQuick_9.setObjectName("lineEditQuick_9")
self.horizontalLayoutQuick_9.addWidget(self.lineEditQuick_9)
self.pushButtonQuick_9 = QtWidgets.QPushButton(self.layoutWidget2)
self.pushButtonQuick_9.setObjectName("pushButtonQuick_9")
self.horizontalLayoutQuick_9.addWidget(self.pushButtonQuick_9)
self.verticalLayout_8.addLayout(self.horizontalLayoutQuick_9)
self.horizontalLayoutQuick_10 = QtWidgets.QHBoxLayout()
self.horizontalLayoutQuick_10.setObjectName("horizontalLayoutQuick_10")
self.lineEditQuick_10 = QtWidgets.QLineEdit(self.layoutWidget2)
self.lineEditQuick_10.setObjectName("lineEditQuick_10")
self.horizontalLayoutQuick_10.addWidget(self.lineEditQuick_10)
self.pushButtonQuick_10 = QtWidgets.QPushButton(self.layoutWidget2)
self.pushButtonQuick_10.setObjectName("pushButtonQuick_10")
self.horizontalLayoutQuick_10.addWidget(self.pushButtonQuick_10)
self.verticalLayout_8.addLayout(self.horizontalLayoutQuick_10)
self.horizontalLayoutQuick_11 = QtWidgets.QHBoxLayout()
self.horizontalLayoutQuick_11.setObjectName("horizontalLayoutQuick_11")
self.lineEditQuick_11 = QtWidgets.QLineEdit(self.layoutWidget2)
self.lineEditQuick_11.setObjectName("lineEditQuick_11")
self.horizontalLayoutQuick_11.addWidget(self.lineEditQuick_11)
self.pushButtonQuick_11 = QtWidgets.QPushButton(self.layoutWidget2)
self.pushButtonQuick_11.setObjectName("pushButtonQuick_11")
self.horizontalLayoutQuick_11.addWidget(self.pushButtonQuick_11)
self.verticalLayout_8.addLayout(self.horizontalLayoutQuick_11)
self.horizontalLayoutQuick_12 = QtWidgets.QHBoxLayout()
self.horizontalLayoutQuick_12.setObjectName("horizontalLayoutQuick_12")
self.lineEditQuick_12 = QtWidgets.QLineEdit(self.layoutWidget2)
self.lineEditQuick_12.setObjectName("lineEditQuick_12")
self.horizontalLayoutQuick_12.addWidget(self.lineEditQuick_12)
self.pushButtonQuick_12 = QtWidgets.QPushButton(self.layoutWidget2)
self.pushButtonQuick_12.setObjectName("pushButtonQuick_12")
self.horizontalLayoutQuick_12.addWidget(self.pushButtonQuick_12)
self.verticalLayout_8.addLayout(self.horizontalLayoutQuick_12)
self.horizontalLayoutQuick_13 = QtWidgets.QHBoxLayout()
self.horizontalLayoutQuick_13.setObjectName("horizontalLayoutQuick_13")
self.lineEditQuick_13 = QtWidgets.QLineEdit(self.layoutWidget2)
self.lineEditQuick_13.setObjectName("lineEditQuick_13")
self.horizontalLayoutQuick_13.addWidget(self.lineEditQuick_13)
self.pushButtonQuick_13 = QtWidgets.QPushButton(self.layoutWidget2)
self.pushButtonQuick_13.setObjectName("pushButtonQuick_13")
self.horizontalLayoutQuick_13.addWidget(self.pushButtonQuick_13)
self.verticalLayout_8.addLayout(self.horizontalLayoutQuick_13)
self.horizontalLayoutQuick_14 = QtWidgets.QHBoxLayout()
self.horizontalLayoutQuick_14.setObjectName("horizontalLayoutQuick_14")
self.lineEditQuick_14 = QtWidgets.QLineEdit(self.layoutWidget2)
self.lineEditQuick_14.setObjectName("lineEditQuick_14")
self.horizontalLayoutQuick_14.addWidget(self.lineEditQuick_14)
self.pushButtonQuick_14 = QtWidgets.QPushButton(self.layoutWidget2)
self.pushButtonQuick_14.setObjectName("pushButtonQuick_14")
self.horizontalLayoutQuick_14.addWidget(self.pushButtonQuick_14)
self.verticalLayout_8.addLayout(self.horizontalLayoutQuick_14)
self.horizontalLayoutQuick_15 = QtWidgets.QHBoxLayout()
self.horizontalLayoutQuick_15.setObjectName("horizontalLayoutQuick_15")
self.lineEditQuick_15 = QtWidgets.QLineEdit(self.layoutWidget2)
self.lineEditQuick_15.setObjectName("lineEditQuick_15")
self.horizontalLayoutQuick_15.addWidget(self.lineEditQuick_15)
self.pushButtonQuick_15 = QtWidgets.QPushButton(self.layoutWidget2)
self.pushButtonQuick_15.setObjectName("pushButtonQuick_15")
self.horizontalLayoutQuick_15.addWidget(self.pushButtonQuick_15)
self.verticalLayout_8.addLayout(self.horizontalLayoutQuick_15)
self.horizontalLayoutQuick_16 = QtWidgets.QHBoxLayout()
self.horizontalLayoutQuick_16.setObjectName("horizontalLayoutQuick_16")
self.lineEditQuick_16 = QtWidgets.QLineEdit(self.layoutWidget2)
self.lineEditQuick_16.setObjectName("lineEditQuick_16")
self.horizontalLayoutQuick_16.addWidget(self.lineEditQuick_16)
self.pushButtonQuick_16 = QtWidgets.QPushButton(self.layoutWidget2)
self.pushButtonQuick_16.setObjectName("pushButtonQuick_16")
self.horizontalLayoutQuick_16.addWidget(self.pushButtonQuick_16)
self.verticalLayout_8.addLayout(self.horizontalLayoutQuick_16)
self.horizontalLayoutQuick_17 = QtWidgets.QHBoxLayout()
self.horizontalLayoutQuick_17.setObjectName("horizontalLayoutQuick_17")
self.lineEditQuick_17 = QtWidgets.QLineEdit(self.layoutWidget2)
self.lineEditQuick_17.setObjectName("lineEditQuick_17")
self.horizontalLayoutQuick_17.addWidget(self.lineEditQuick_17)
self.pushButtonQuick_17 = QtWidgets.QPushButton(self.layoutWidget2)
self.pushButtonQuick_17.setObjectName("pushButtonQuick_17")
self.horizontalLayoutQuick_17.addWidget(self.pushButtonQuick_17)
self.verticalLayout_8.addLayout(self.horizontalLayoutQuick_17)
self.horizontalLayoutQuick_18 = QtWidgets.QHBoxLayout()
self.horizontalLayoutQuick_18.setObjectName("horizontalLayoutQuick_18")
self.lineEditQuick_18 = QtWidgets.QLineEdit(self.layoutWidget2)
self.lineEditQuick_18.setObjectName("lineEditQuick_18")
self.horizontalLayoutQuick_18.addWidget(self.lineEditQuick_18)
self.pushButtonQuick_18 = QtWidgets.QPushButton(self.layoutWidget2)
self.pushButtonQuick_18.setObjectName("pushButtonQuick_18")
self.horizontalLayoutQuick_18.addWidget(self.pushButtonQuick_18)
self.verticalLayout_8.addLayout(self.horizontalLayoutQuick_18)
self.horizontalLayoutQuick_19 = QtWidgets.QHBoxLayout()
self.horizontalLayoutQuick_19.setObjectName("horizontalLayoutQuick_19")
self.lineEditQuick_19 = QtWidgets.QLineEdit(self.layoutWidget2)
self.lineEditQuick_19.setObjectName("lineEditQuick_19")
self.horizontalLayoutQuick_19.addWidget(self.lineEditQuick_19)
self.pushButtonQuick_19 = QtWidgets.QPushButton(self.layoutWidget2)
self.pushButtonQuick_19.setObjectName("pushButtonQuick_19")
self.horizontalLayoutQuick_19.addWidget(self.pushButtonQuick_19)
self.verticalLayout_8.addLayout(self.horizontalLayoutQuick_19)
self.horizontalLayoutQuick_20 = QtWidgets.QHBoxLayout()
self.horizontalLayoutQuick_20.setObjectName("horizontalLayoutQuick_20")
self.lineEditQuick_20 = QtWidgets.QLineEdit(self.layoutWidget2)
self.lineEditQuick_20.setObjectName("lineEditQuick_20")
self.horizontalLayoutQuick_20.addWidget(self.lineEditQuick_20)
self.pushButtonQuick_20 = QtWidgets.QPushButton(self.layoutWidget2)
self.pushButtonQuick_20.setObjectName("pushButtonQuick_20")
self.horizontalLayoutQuick_20.addWidget(self.pushButtonQuick_20)
self.verticalLayout_8.addLayout(self.horizontalLayoutQuick_20)
self.scrollArea.setWidget(self.scrollAreaWidgetContents) self.scrollArea.setWidget(self.scrollAreaWidgetContents)
self.horizontalLayout_16.addWidget(self.scrollArea) self.horizontalLayout_16.addWidget(self.scrollArea)
self.horizontalLayout_14.addWidget(self.splitter) self.horizontalLayout_14.addWidget(self.splitter)
@ -719,25 +539,5 @@ class Ui_UartAssistant(object):
self.label_SendNum_4.setText(_translate("UartAssistant", "窗口标准差")) self.label_SendNum_4.setText(_translate("UartAssistant", "窗口标准差"))
self.tabWidget.setTabText(self.tabWidget.indexOf(self.tab_2), _translate("UartAssistant", "曲线绘制")) self.tabWidget.setTabText(self.tabWidget.indexOf(self.tab_2), _translate("UartAssistant", "曲线绘制"))
self.label_8.setText(_translate("UartAssistant", "快捷指令")) self.label_8.setText(_translate("UartAssistant", "快捷指令"))
self.checkBox_return.setText(_translate("UartAssistant", "添加\"回车换行\"")) self.checkBox_return.setText(_translate("UartAssistant", "添加\"\\r\\n\""))
self.pushButtonQuick_1.setText(_translate("UartAssistant", "Button01"))
self.pushButtonQuick_2.setText(_translate("UartAssistant", "Button02"))
self.pushButtonQuick_3.setText(_translate("UartAssistant", "Button03"))
self.pushButtonQuick_4.setText(_translate("UartAssistant", "Button04"))
self.pushButtonQuick_5.setText(_translate("UartAssistant", "Button05"))
self.pushButtonQuick_6.setText(_translate("UartAssistant", "Button06"))
self.pushButtonQuick_7.setText(_translate("UartAssistant", "Button07"))
self.pushButtonQuick_8.setText(_translate("UartAssistant", "Button08"))
self.pushButtonQuick_9.setText(_translate("UartAssistant", "Button09"))
self.pushButtonQuick_10.setText(_translate("UartAssistant", "Button10"))
self.pushButtonQuick_11.setText(_translate("UartAssistant", "Button11"))
self.pushButtonQuick_12.setText(_translate("UartAssistant", "Button12"))
self.pushButtonQuick_13.setText(_translate("UartAssistant", "Button13"))
self.pushButtonQuick_14.setText(_translate("UartAssistant", "Button14"))
self.pushButtonQuick_15.setText(_translate("UartAssistant", "Button15"))
self.pushButtonQuick_16.setText(_translate("UartAssistant", "Button16"))
self.pushButtonQuick_17.setText(_translate("UartAssistant", "Button17"))
self.pushButtonQuick_18.setText(_translate("UartAssistant", "Button18"))
self.pushButtonQuick_19.setText(_translate("UartAssistant", "Button19"))
self.pushButtonQuick_20.setText(_translate("UartAssistant", "Button20"))
from PyQt5.QtChart import QChartView from PyQt5.QtChart import QChartView

View File

@ -6,7 +6,7 @@
<rect> <rect>
<x>0</x> <x>0</x>
<y>0</y> <y>0</y>
<width>996</width> <width>999</width>
<height>694</height> <height>694</height>
</rect> </rect>
</property> </property>
@ -670,7 +670,7 @@
<bool>false</bool> <bool>false</bool>
</property> </property>
<property name="currentIndex"> <property name="currentIndex">
<number>1</number> <number>0</number>
</property> </property>
<widget class="QWidget" name="tab"> <widget class="QWidget" name="tab">
<attribute name="title"> <attribute name="title">
@ -1049,7 +1049,7 @@
<x>0</x> <x>0</x>
<y>0</y> <y>0</y>
<width>241</width> <width>241</width>
<height>1000</height> <height>3000</height>
</rect> </rect>
</property> </property>
<widget class="QWidget" name="widget_8" native="true"> <widget class="QWidget" name="widget_8" native="true">
@ -1072,7 +1072,7 @@
<item> <item>
<widget class="QCheckBox" name="checkBox_return"> <widget class="QCheckBox" name="checkBox_return">
<property name="text"> <property name="text">
<string>添加&quot;回车换行&quot;</string> <string>添加&quot;\r\n&quot;</string>
</property> </property>
<property name="checked"> <property name="checked">
<bool>true</bool> <bool>true</bool>
@ -1086,8 +1086,8 @@
<rect> <rect>
<x>12</x> <x>12</x>
<y>42</y> <y>42</y>
<width>236</width> <width>231</width>
<height>1000</height> <height>3000</height>
</rect> </rect>
</property> </property>
<widget class="QWidget" name="layoutWidget"> <widget class="QWidget" name="layoutWidget">
@ -1095,292 +1095,11 @@
<rect> <rect>
<x>12</x> <x>12</x>
<y>12</y> <y>12</y>
<width>218</width> <width>201</width>
<height>616</height> <height>2801</height>
</rect> </rect>
</property> </property>
<layout class="QVBoxLayout" name="verticalLayout_8"> <layout class="QVBoxLayout" name="verticalLayout_8"/>
<item>
<layout class="QHBoxLayout" name="horizontalLayoutQuick_1">
<item>
<widget class="QLineEdit" name="lineEditQuick_1"/>
</item>
<item>
<widget class="QPushButton" name="pushButtonQuick_1">
<property name="text">
<string>Button01</string>
</property>
</widget>
</item>
</layout>
</item>
<item>
<layout class="QHBoxLayout" name="horizontalLayoutQuick_2">
<item>
<widget class="QLineEdit" name="lineEditQuick_2"/>
</item>
<item>
<widget class="QPushButton" name="pushButtonQuick_2">
<property name="text">
<string>Button02</string>
</property>
</widget>
</item>
</layout>
</item>
<item>
<layout class="QHBoxLayout" name="horizontalLayoutQuick_3">
<item>
<widget class="QLineEdit" name="lineEditQuick_3"/>
</item>
<item>
<widget class="QPushButton" name="pushButtonQuick_3">
<property name="text">
<string>Button03</string>
</property>
</widget>
</item>
</layout>
</item>
<item>
<layout class="QHBoxLayout" name="horizontalLayoutQuick_4">
<item>
<widget class="QLineEdit" name="lineEditQuick_4"/>
</item>
<item>
<widget class="QPushButton" name="pushButtonQuick_4">
<property name="text">
<string>Button04</string>
</property>
</widget>
</item>
</layout>
</item>
<item>
<layout class="QHBoxLayout" name="horizontalLayoutQuick_5">
<item>
<widget class="QLineEdit" name="lineEditQuick_5"/>
</item>
<item>
<widget class="QPushButton" name="pushButtonQuick_5">
<property name="text">
<string>Button05</string>
</property>
</widget>
</item>
</layout>
</item>
<item>
<layout class="QHBoxLayout" name="horizontalLayoutQuick_6">
<item>
<widget class="QLineEdit" name="lineEditQuick_6"/>
</item>
<item>
<widget class="QPushButton" name="pushButtonQuick_6">
<property name="text">
<string>Button06</string>
</property>
</widget>
</item>
</layout>
</item>
<item>
<layout class="QHBoxLayout" name="horizontalLayoutQuick_7">
<item>
<widget class="QLineEdit" name="lineEditQuick_7"/>
</item>
<item>
<widget class="QPushButton" name="pushButtonQuick_7">
<property name="text">
<string>Button07</string>
</property>
</widget>
</item>
</layout>
</item>
<item>
<layout class="QHBoxLayout" name="horizontalLayoutQuick_8">
<item>
<widget class="QLineEdit" name="lineEditQuick_8"/>
</item>
<item>
<widget class="QPushButton" name="pushButtonQuick_8">
<property name="text">
<string>Button08</string>
</property>
</widget>
</item>
</layout>
</item>
<item>
<layout class="QHBoxLayout" name="horizontalLayoutQuick_9">
<item>
<widget class="QLineEdit" name="lineEditQuick_9"/>
</item>
<item>
<widget class="QPushButton" name="pushButtonQuick_9">
<property name="text">
<string>Button09</string>
</property>
</widget>
</item>
</layout>
</item>
<item>
<layout class="QHBoxLayout" name="horizontalLayoutQuick_10">
<item>
<widget class="QLineEdit" name="lineEditQuick_10"/>
</item>
<item>
<widget class="QPushButton" name="pushButtonQuick_10">
<property name="text">
<string>Button10</string>
</property>
</widget>
</item>
</layout>
</item>
<item>
<layout class="QHBoxLayout" name="horizontalLayoutQuick_11">
<item>
<widget class="QLineEdit" name="lineEditQuick_11"/>
</item>
<item>
<widget class="QPushButton" name="pushButtonQuick_11">
<property name="text">
<string>Button11</string>
</property>
</widget>
</item>
</layout>
</item>
<item>
<layout class="QHBoxLayout" name="horizontalLayoutQuick_12">
<item>
<widget class="QLineEdit" name="lineEditQuick_12"/>
</item>
<item>
<widget class="QPushButton" name="pushButtonQuick_12">
<property name="text">
<string>Button12</string>
</property>
</widget>
</item>
</layout>
</item>
<item>
<layout class="QHBoxLayout" name="horizontalLayoutQuick_13">
<item>
<widget class="QLineEdit" name="lineEditQuick_13"/>
</item>
<item>
<widget class="QPushButton" name="pushButtonQuick_13">
<property name="text">
<string>Button13</string>
</property>
</widget>
</item>
</layout>
</item>
<item>
<layout class="QHBoxLayout" name="horizontalLayoutQuick_14">
<item>
<widget class="QLineEdit" name="lineEditQuick_14"/>
</item>
<item>
<widget class="QPushButton" name="pushButtonQuick_14">
<property name="text">
<string>Button14</string>
</property>
</widget>
</item>
</layout>
</item>
<item>
<layout class="QHBoxLayout" name="horizontalLayoutQuick_15">
<item>
<widget class="QLineEdit" name="lineEditQuick_15"/>
</item>
<item>
<widget class="QPushButton" name="pushButtonQuick_15">
<property name="text">
<string>Button15</string>
</property>
</widget>
</item>
</layout>
</item>
<item>
<layout class="QHBoxLayout" name="horizontalLayoutQuick_16">
<item>
<widget class="QLineEdit" name="lineEditQuick_16"/>
</item>
<item>
<widget class="QPushButton" name="pushButtonQuick_16">
<property name="text">
<string>Button16</string>
</property>
</widget>
</item>
</layout>
</item>
<item>
<layout class="QHBoxLayout" name="horizontalLayoutQuick_17">
<item>
<widget class="QLineEdit" name="lineEditQuick_17"/>
</item>
<item>
<widget class="QPushButton" name="pushButtonQuick_17">
<property name="text">
<string>Button17</string>
</property>
</widget>
</item>
</layout>
</item>
<item>
<layout class="QHBoxLayout" name="horizontalLayoutQuick_18">
<item>
<widget class="QLineEdit" name="lineEditQuick_18"/>
</item>
<item>
<widget class="QPushButton" name="pushButtonQuick_18">
<property name="text">
<string>Button18</string>
</property>
</widget>
</item>
</layout>
</item>
<item>
<layout class="QHBoxLayout" name="horizontalLayoutQuick_19">
<item>
<widget class="QLineEdit" name="lineEditQuick_19"/>
</item>
<item>
<widget class="QPushButton" name="pushButtonQuick_19">
<property name="text">
<string>Button19</string>
</property>
</widget>
</item>
</layout>
</item>
<item>
<layout class="QHBoxLayout" name="horizontalLayoutQuick_20">
<item>
<widget class="QLineEdit" name="lineEditQuick_20"/>
</item>
<item>
<widget class="QPushButton" name="pushButtonQuick_20">
<property name="text">
<string>Button20</string>
</property>
</widget>
</item>
</layout>
</item>
</layout>
</widget> </widget>
</widget> </widget>
</widget> </widget>

View File

@ -9,13 +9,13 @@ Created on Tue May 28 15:40:48 2024
import time,math,os import time,math,os
import re,csv,datetime import re,csv
from PyQt5.QtCore import QThread, pyqtSignal,Qt from PyQt5.QtCore import QThread, pyqtSignal,Qt
from PyQt5.QtWidgets import QMessageBox from PyQt5.QtWidgets import QMessageBox
from PyQt5.QtChart import QChart, QValueAxis, QSplineSeries,QLineSeries from PyQt5.QtChart import QChart, QValueAxis, QSplineSeries,QLineSeries
from PyQt5.QtGui import QPen from PyQt5.QtGui import QPen
from configparser import ConfigParser
# 波形显示 # 波形显示
class QChartViewPlot(QChart): class QChartViewPlot(QChart):
@ -112,7 +112,6 @@ class UpdateDataThread(QThread):
super(UpdateDataThread, self).__init__(parent) super(UpdateDataThread, self).__init__(parent)
self.is_exit = False self.is_exit = False
self.x_range = 1024 self.x_range = 1024
self.getDateQx = GetDataQX()
self.flag = 0 self.flag = 0
@ -169,210 +168,24 @@ class UpdateDataThread(QThread):
class GetDataQX(): #读取请芯数据
def __init__(self, parent=None):
super().__init__()
self.indOfReturn =0
self.regexQx = re.compile(r'(A\+|B\+|\s)+') # 编译正则表达式
self.TIME_FORMAT = "%Y-%m-%d %H:%M:%S"
def Transdata(self,data):
parts = re.split(self.regexQx,data)
# 过滤掉空字符串
parts = [part for part in parts if part]
#print(parts)
methane = float(parts[1])
airTemp = float(parts[3])
laserTemp = float( parts[5])/1
laerIntensity = float(parts[7])*10
timeCrvt=time.strftime(self.TIME_FORMAT, time.localtime())
self.data2csv =[(timeCrvt,methane,airTemp,laserTemp,laerIntensity)]
#print(self.data2csv)
if self.indOfReturn == 0:
returnData = methane
elif self.indOfReturn == 1:
returnData = airTemp
elif self.indOfReturn == 2:
returnData = laserTemp
elif self.indOfReturn == 3:
returnData = laerIntensity
print(returnData)
return returnData
def SaveCsv(self,filenameCsv):
# 打开一个文件用于写入,如果文件不存在则创建
if os.path.isfile(filenameCsv) == 0:
# 文件为空,需要写入表头
with open(filenameCsv, mode='w', newline='') as file:
writer = csv.writer(file)
writer.writerow(('time', 'Methane', 'Air Temp', 'Laser Temp', 'Laser Intensity'))
else:
with open(filenameCsv, mode='a', newline='') as file:
# 创建一个写入器对象
writer = csv.writer(file)
# 写入数据行
writer.writerows(self.data2csv)
def IndOfReturn(self,ind):
self.indOfReturn = ind
class GetDataTF(): #读取费加罗或者自定义数据 class GetDataTF(): #读取费加罗或者自定义数据
def __init__(self, parent=None): def __init__(self, parent=None):
super().__init__() super().__init__()
self.indOfReturn =0 self.indOfReturn =0
#self.regex = re.compile(r'(A\+|B\+|\s)+') # 编译正则表达式
self.TIME_FORMAT = "%Y-%m-%d %H:%M:%S" self.TIME_FORMAT = "%Y-%m-%d %H:%M:%S"
self.regularIniPath = "regular.ini" # 配置文件默认路径
self.headStr = "" self.headStr = ""
self.rowTitle=[] self.rowTitle=[]
self.buttons_config = [[None for _ in range(3)] for _ in range(20)] self.csv_buffer = []
#存放快捷按键配置
self.CheckCfgIniData() # 初始化配置文件
def Transdata(self,data):
if data[:2] ==self.headStr:
# parts = re.split(self.regex,data)
# # 过滤掉空字符串
# parts = [part for part in parts if part]
#print(parts)
# methane = float(parts[1])
# airTemp = float(parts[3])
# laserTemp = float( parts[5])/1
# laerIntensity = float(parts[7])*10
# self.data2csv =[(timeCrvt,methane,airTemp,laserTemp,laerIntensity)]
self.data2csv = self.regex.findall(data)
#print(self.data2csv)
# if self.indOfReturn == 0:
# returnData = methane
# elif self.indOfReturn == 1:
# returnData = airTemp
# elif self.indOfReturn == 2:
# returnData = laserTemp
# elif self.indOfReturn == 3:
# returnData = laerIntensity
returnData = float(self.data2csv[self.indOfReturn])
print("returnData",returnData)
return returnData
else:
return "noNum"
def SaveCsv(self,filenameCsv):
# 打开一个文件用于写入,如果文件不存在则创建
if os.path.isfile(filenameCsv) == 0:
# 文件为空,需要写入表头
with open(filenameCsv, mode='w', newline='') as file:
writer = csv.writer(file)
#writer.writerow(('time', 'Methane', 'Air Temp', 'Laser Temp', 'Laser Intensity'))
writer.writerow(self.rowTitle)
else:
with open(filenameCsv, mode='a', newline='') as file:
# 创建一个写入器对象
writer = csv.writer(file)
# 写入数据行
timeCrvt=time.strftime(self.TIME_FORMAT, time.localtime())
self.data2csv.insert(0, timeCrvt)
print(self.data2csv)
writer.writerows([self.data2csv])
def IndOfReturn(self,ind):
self.indOfReturn = ind
def CheckCfgIniData(self):
if not os.path.exists(self.regularIniPath):
config = ConfigParser()
config.add_section('TF_config')
config.set('TF_config', 'regular', '\+?-?\d+(?:\.\d+)?')
#config.set('TF_config', 'regular', '(A\+|B\+|\s)+')
config.set('TF_config', 'headStr', 'A+')
config.set('TF_config', 'rowTitle', 'time,Methane,Air Temp,Laser Temp,Laser Intensity,amplification,NL,ND,Sinal,SNR,PEAK,Best Piont')
config.add_section('Quick_config')
config.set('Quick_config', 'Button00', 'write 0,2024100101|序列号')
config.set('Quick_config', 'Button01', 'write 1,65000|激光温度')
config.set('Quick_config', 'Button02', 'write 2,1000|K*1000')
config.set('Quick_config', 'Button03', 'write 3,0|B*1000')
config.set('Quick_config', 'Button04', 'write 4,0|可调电阻')
config.set('Quick_config', 'Button05', 'write 5,30|电阻抽头')
config.set('Quick_config', 'Button06', 'write 6,0|输出温度')
config.set('Quick_config', 'Button07', 'write 7,0|输出激光')
config.set('Quick_config', 'Button08', 'write 8,1|输出状态')
config.set('Quick_config', 'Button09', 'write 9,0|激光温补')
config.set('Quick_config', 'Button10', 'write 10,100|噪声长度')
config.set('Quick_config', 'Button11', 'write 11,600|扫描长度')
config.set('Quick_config', 'Button12', '')
config.set('Quick_config', 'Button13', 'write 13,30500|气温校准')
config.set('Quick_config', 'Button14', 'write 14,1|滑动开关')
config.set('Quick_config', 'Button15', 'write 15,10|滑动标准差')
config.set('Quick_config', 'Button16', 'write 16,1|浓度温补')
config.set('Quick_config', 'Button17', '')
config.set('Quick_config', 'Button18', '')
config.set('Quick_config', 'Button19', '')
with open(self.regularIniPath, 'w' ,encoding='utf-8') as f:
config.write(f)
config = ConfigParser()
config.read(self.regularIniPath, encoding='utf-8')
try:
self.headStr = config.get('TF_config', 'headStr')
self.regex = re.compile(config.get('TF_config', 'regular'))
self.rowTitleStr = config.get('TF_config', 'rowTitle')
def SetConfig(self,config_in):
self.regex= re.compile(config_in[0]) #正则表达
self.headStr = config_in[1]
self.rowTitleStr = config_in[2]
#print(self.rowTitleStr)
self.rowTitle = self.rowTitleStr.split(',') self.rowTitle = self.rowTitleStr.split(',')
print(type(self.rowTitle))
print(f"Configuration read successfully: {self.headStr}, {self.regex}, {self.rowTitle}")
# 创建一个空字典来存储按钮名称和对应的配置
# 循环遍历按钮编号从0到19
for i in range(20):
button_name = f'Button{i:02}' # 格式化按钮名称,确保两位数
# 使用 get 方法安全地获取配置,如果不存在则返回空字符串
config_value = config.get('Quick_config', button_name, fallback='')
config_value_split = config_value.split('|')
# 将按钮名称和配置信息存储在字典中
self.buttons_config[i][0] = button_name
if len(config_value_split) == 2:
self.buttons_config[i][1] = config_value_split[0]
self.buttons_config[i][2] = config_value_split[1]
# 打印字典查看结果
for i in range(20):
print(f'{self.buttons_config[i][0]}: {self.buttons_config[i][1]}|{self.buttons_config[i][2]}')
except Exception as e:
print(f"Error reading configuration: {e}")
def SetCfgIniData(self,button_name,set_text):
config = ConfigParser()
config.read(self.regularIniPath, encoding='utf-8')
config.set('Quick_config', button_name, set_text)
with open(self.regularIniPath, 'w' ,encoding='utf-8') as f:
config.write(f)
class GetDataOther(): #读取费加罗或者自定义数据
def __init__(self, parent=None):
super().__init__()
self.indOfReturn =0
#self.regex = re.compile(r'(A\+|B\+|\s)+') # 编译正则表达式
self.TIME_FORMAT = "%Y-%m-%d %H:%M:%S"
self.OtherIniPath = "OtherData.ini" # 配置文件默认路径
self.headStr = ""
self.rowTitle=[]
self.CheckCfgIniData() # 初始化配置文件
def Transdata(self,data): def Transdata(self,data):
if data[:2] ==self.headStr: if data[:2] ==self.headStr:
@ -384,49 +197,28 @@ class GetDataOther(): #读取费加罗或者自定义数据
else: else:
return "noNum" return "noNum"
def SaveCsv(self,filenameCsv): def SaveCsv(self,filenameCsv,num):
# 打开一个文件用于写入,如果文件不存在则创建 # 打开一个文件用于写入,如果文件不存在则创建
# 增加num 写入文件间隔
if os.path.isfile(filenameCsv) == 0: if os.path.isfile(filenameCsv) == 0:
# 文件为空,需要写入表头 # 文件为空,需要写入表头
with open(filenameCsv, mode='w', newline='') as file: with open(filenameCsv, mode='w', newline='') as file:
writer = csv.writer(file) writer = csv.writer(file)
#writer.writerow(('time', 'Methane', 'Air Temp', 'Laser Temp', 'Laser Intensity'))
writer.writerow(self.rowTitle) writer.writerow(self.rowTitle)
else: else:
timeCrvt=time.strftime(self.TIME_FORMAT, time.localtime())
self.data2csv.insert(0, timeCrvt)
print(self.data2csv)
self.csv_buffer.append(self.data2csv)
if len(self.csv_buffer)>= num:
with open(filenameCsv, mode='a', newline='') as file: with open(filenameCsv, mode='a', newline='') as file:
# 创建一个写入器对象 # 创建一个写入器对象
writer = csv.writer(file) writer = csv.writer(file)
# 写入数据行 # 写入数据行
timeCrvt=time.strftime(self.TIME_FORMAT, time.localtime()) writer.writerows(self.csv_buffer)
self.data2csv.insert(0, timeCrvt) self.csv_buffer.clear()
print(self.data2csv)
writer.writerows([self.data2csv])
def IndOfReturn(self,ind): def IndOfReturn(self,ind):
self.indOfReturn = ind self.indOfReturn = ind
def CheckCfgIniData(self):
if not os.path.exists(self.OtherIniPath):
config = ConfigParser()
config.add_section('OtherData_config')
config.set('OtherData_config', 'regular', '\+?-?\d+(?:\.\d+)?')
# config.set('TF_config', 'regular', '(A\+|B\+|\s)+')
config.set('OtherData_config', 'headStr', 'A+')
config.set('OtherData_config', 'rowTitle', 'time,DATA1,DATA2')
with open(self.OtherIniPath, 'w') as f:
config.write(f)
config = ConfigParser()
config.read(self.OtherIniPath, encoding='utf-8')
try:
self.headStr = config.get('OtherData_config', 'headStr')
self.regex = re.compile(config.get('OtherData_config', 'regular'))
self.rowTitleStr = config.get('OtherData_config', 'rowTitle')
self.rowTitle = self.rowTitleStr.split(',')
print(type(self.rowTitle))
print(f"Configuration read successfully: {self.headStr}, {self.regex}, {self.rowTitle}")
except Exception as e:
print(f"Error reading configuration: {e}")