优化了界面显示
This commit is contained in:
parent
f86b9f0a65
commit
46e7114e95
Binary file not shown.
@ -27,6 +27,9 @@ class PyHexQT(QtWidgets.QWidget,Ui_Form):
|
||||
self.bytes_length = int(config.get('NetConfig', 'bytes_length'))
|
||||
self.num_scale = int(config.get('NetConfig', 'num_scale'))
|
||||
self.log_time = int(config.get('NetConfig', 'log_time'))
|
||||
windowTitle = config.get('NetConfig', 'window_title')
|
||||
self.setWindowTitle(windowTitle)
|
||||
|
||||
self.log_count = 0
|
||||
self.log_buffer = []
|
||||
# 定时器接收数据
|
||||
@ -55,6 +58,7 @@ class PyHexQT(QtWidgets.QWidget,Ui_Form):
|
||||
try:
|
||||
self.udp_socket.bind(udp_addr)
|
||||
print("开始监听。。。")
|
||||
self.udp_socket.setblocking(False) #设置非阻塞
|
||||
except Exception as e:
|
||||
print(f"Error reading configuration: {e}")
|
||||
return None
|
||||
@ -72,6 +76,8 @@ class PyHexQT(QtWidgets.QWidget,Ui_Form):
|
||||
out_s = ''
|
||||
out_s = ' '.join(['{:02X}'.format(b) for b in bytes.fromhex(line_utf8)])
|
||||
|
||||
# %% 在界面上更新
|
||||
self.add_line_to_textedit(out_s)
|
||||
# 获取到text光标
|
||||
textCursor = self.textEdit.textCursor()
|
||||
# 滚动到底部
|
||||
@ -79,11 +85,12 @@ class PyHexQT(QtWidgets.QWidget,Ui_Form):
|
||||
# 设置光标到text中去
|
||||
self.textEdit.setTextCursor(textCursor)
|
||||
|
||||
self.textEdit.insertPlainText(out_s)
|
||||
self.textEdit.insertPlainText('\r\n')
|
||||
# self.textEdit.insertPlainText(out_s)
|
||||
# self.textEdit.insertPlainText('\r\n')
|
||||
|
||||
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"
|
||||
#将数据加入缓存区域
|
||||
self.log_buffer.append(sav_str)
|
||||
@ -92,20 +99,20 @@ class PyHexQT(QtWidgets.QWidget,Ui_Form):
|
||||
if self.log_count>self.log_time:
|
||||
self.data_save()
|
||||
|
||||
#数据转化
|
||||
#%% 数据转化,并显示在框中
|
||||
|
||||
num_hex_str = line_utf8[self.bytes_start*2:(self.bytes_start*2 +self.bytes_length*2 )]
|
||||
num_out = int(num_hex_str,16)/self.num_scale
|
||||
if num_hex_str:
|
||||
num_out = int(num_hex_str,16)/self.num_scale
|
||||
self.textBrowser.clear()
|
||||
# 设置字体和颜色
|
||||
char_format = QtGui.QTextCharFormat()
|
||||
char_format.setFont(QtGui.QFont("SimSun", 28)) # 设置字体为 SimSun,字号为 28
|
||||
char_format.setForeground(QtGui.QBrush(QtGui.QColor("red"))) # 设置文字颜色为红色
|
||||
# 创建 QTextCursor 对象
|
||||
cursor = self.textBrowser.textCursor() # 插入带有格式的文本
|
||||
cursor.insertText(str(num_out), char_format)
|
||||
|
||||
self.textBrowser.clear()
|
||||
|
||||
# 设置字体和颜色
|
||||
char_format = QtGui.QTextCharFormat()
|
||||
char_format.setFont(QtGui.QFont("SimSun", 28)) # 设置字体为 SimSun,字号为 28
|
||||
char_format.setForeground(QtGui.QBrush(QtGui.QColor("red"))) # 设置文字颜色为红色
|
||||
# 创建 QTextCursor 对象
|
||||
cursor = self.textBrowser.textCursor() # 插入带有格式的文本
|
||||
cursor.insertText(str(num_out), char_format)
|
||||
except socket.error as e:
|
||||
#print(f"Socket error: {e}")
|
||||
pass
|
||||
@ -116,6 +123,18 @@ class PyHexQT(QtWidgets.QWidget,Ui_Form):
|
||||
file.writelines(self.log_buffer)
|
||||
self.log_buffer.clear()
|
||||
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):
|
||||
if not os.path.exists(self.udp):
|
||||
@ -127,6 +146,7 @@ class PyHexQT(QtWidgets.QWidget,Ui_Form):
|
||||
config.set('NetConfig', 'bytes_length', '4')
|
||||
config.set('NetConfig', 'num_scale', '1000')
|
||||
config.set('NetConfig', 'log_time', '1')
|
||||
config.set('NetConfig', 'window_title', 'Hex数据解调工具')
|
||||
with open(self.udp, 'w', encoding='utf-8') as f:
|
||||
config.write(f)
|
||||
|
||||
|
@ -4,5 +4,6 @@ port = 9000
|
||||
bytes_start = 3
|
||||
bytes_length = 4
|
||||
num_scale = 1000
|
||||
log_time= 10
|
||||
log_time = 1
|
||||
window_title = Hex数据解调工具
|
||||
|
||||
|
@ -5,7 +5,7 @@ Created on Mon May 27 14:31:38 2024
|
||||
@author: WANGXIBAO
|
||||
"""
|
||||
|
||||
import sys
|
||||
import sys,os
|
||||
import serial,re
|
||||
import serial.tools.list_ports
|
||||
import time,datetime
|
||||
@ -13,28 +13,35 @@ import time,datetime
|
||||
from PyQt5 import QtWidgets
|
||||
from PyQt5.Qt import QPainter
|
||||
from PyQt5.QtWidgets import QMessageBox ,QFileDialog,QInputDialog
|
||||
from PyQt5.QtCore import QTimer ,Qt
|
||||
from PyQt5.QtCore import QTimer
|
||||
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.QtGui import QIcon
|
||||
|
||||
from configparser import ConfigParser
|
||||
|
||||
class PyQt5Serial(QtWidgets.QWidget,Ui_UartAssistant):
|
||||
# %%初始化程序
|
||||
def __init__(self):
|
||||
super(PyQt5Serial, self).__init__()
|
||||
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.get_data_qx = GetDataQX()
|
||||
self.get_data_qx.IndOfReturn(0) #根据数据特点给一个初始值
|
||||
self.get_data_tf = GetDataTF()
|
||||
self.get_data_tf.IndOfReturn(0) #根据数据特点给一个初始值
|
||||
self.get_data_other = GetDataOther()
|
||||
self.get_data_other.IndOfReturn(0) #根据数据特点给一个初始值
|
||||
|
||||
|
||||
self.init()
|
||||
self.CheckCfgIniData() #更改按钮的文字
|
||||
|
||||
self.ser = serial.Serial() #创建一个空对象
|
||||
self.port_check()
|
||||
|
||||
@ -73,23 +80,14 @@ class PyQt5Serial(QtWidgets.QWidget,Ui_UartAssistant):
|
||||
#加载快捷指令
|
||||
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.lineUtf8 = ""
|
||||
# 用于标志是否开始存CSV
|
||||
self.CsvFlag = 0
|
||||
self.flag_draw = 0
|
||||
self.double_click_timers = {} # 存储双击定时器
|
||||
# =============================================================================
|
||||
# def wheelEvent(self, event):
|
||||
# if self.plot_view.underMouse:
|
||||
@ -122,10 +120,13 @@ class PyQt5Serial(QtWidgets.QWidget,Ui_UartAssistant):
|
||||
self.port_close()
|
||||
|
||||
#关闭界面前保存快捷区域的命令和名称
|
||||
for i in range(20): # 假设有20个按钮
|
||||
button_name = f'Button{i:02}' # 格式化按钮名称,确保两位数
|
||||
set_text = getattr(self, f'lineEditQuick_{i+1}').text()+ "|" + getattr(self, f'pushButtonQuick_{i+1}').text()
|
||||
self.get_data_tf.SetCfgIniData(button_name, set_text)
|
||||
for i in range(self.quick_num): # 假设有20个按钮
|
||||
index_str = f"{i:02}" # 确保编号为两位数字形式
|
||||
lineEditName = f"lineEditQuick_{index_str}"
|
||||
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.commandLinkButton1.clicked.connect(self.link)
|
||||
# hexRecevie与savCsv的按键关联
|
||||
self.checkBoxHexReceive.stateChanged.connect(self.hex_link_savCsv)
|
||||
|
||||
# 清除发送按钮
|
||||
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)
|
||||
# 创建一个通用的槽函数来处理所有按钮
|
||||
# 例如,使用lambda表达式传递额外的参数
|
||||
for i in range(1, 21): # 假设有20个按钮
|
||||
# getattr(self, f'pushButtonQuick_{i}').clicked.connect(
|
||||
# lambda checked, line_edit=f'lineEditQuick_{i}': self.onPushButtonQuickClicked(line_edit)
|
||||
# )
|
||||
# 连接左键点击事件
|
||||
button = getattr(self, f'pushButtonQuick_{i}')
|
||||
line_edit = f'lineEditQuick_{i}'
|
||||
button.clicked.connect(lambda checked, line_edit=line_edit: self.onPushButtonQuickClicked(line_edit))
|
||||
|
||||
# 连接右键点击事件
|
||||
button_id = f'pushButtonQuick_{i}'
|
||||
button.setContextMenuPolicy(Qt.CustomContextMenu)
|
||||
button.customContextMenuRequested.connect(lambda position, button_id=button_id: self.onButtonRightClicked(button_id))
|
||||
# 动态创建控件并存储引用
|
||||
for i in range(self.quick_num): # 从0到20
|
||||
index_str = f"{i:02}" # 确保编号为两位数字形式
|
||||
horizontalLayoutName = f"horizontalLayoutQuick_{index_str}"
|
||||
horizontalLayout = QtWidgets.QHBoxLayout()
|
||||
horizontalLayout.setObjectName(horizontalLayoutName)
|
||||
|
||||
# 创建 QLineEdit 并设置动态属性
|
||||
lineEditName = f"lineEditQuick_{index_str}"
|
||||
setattr(self, lineEditName, QtWidgets.QLineEdit(self.layoutWidget1))
|
||||
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):
|
||||
@ -213,7 +222,7 @@ class PyQt5Serial(QtWidgets.QWidget,Ui_UartAssistant):
|
||||
def port_open(self):
|
||||
self.ser.port = self.comboBoxSerial.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():
|
||||
nowTime = datetime.datetime.now().strftime("%Y-%m-%d %H:%M:%S.%f")
|
||||
nowTime = nowTime[:-3]
|
||||
self.textEditReceive.insertPlainText(nowTime + " ")
|
||||
|
||||
#self.textEditReceive.insertPlainText(nowTime + " ")
|
||||
self.add_line_to_textedit(nowTime + " ")
|
||||
# HEX显示数据
|
||||
if self.checkBoxHexReceive.checkState():
|
||||
out_s = ''
|
||||
for i in range(0, len(data)):
|
||||
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显示数据
|
||||
else:
|
||||
#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"))
|
||||
# 接收换行
|
||||
if self.checkBoxCRLF.isChecked():
|
||||
self.textEditReceive.insertPlainText('\r\n')
|
||||
#self.textEditReceive.insertPlainText('\r\n')
|
||||
self.add_line_to_textedit('\r\n')
|
||||
|
||||
# 获取到text光标
|
||||
textCursor = self.textEditReceive.textCursor()
|
||||
@ -422,7 +434,7 @@ class PyQt5Serial(QtWidgets.QWidget,Ui_UartAssistant):
|
||||
self.textEditReceive.insertPlainText(out_s)
|
||||
# ASCII接收显示
|
||||
else:
|
||||
self.textEditReceive.insertPlainText(input_s.decode('utf-8'))
|
||||
self.textEditReceive.insertPlainText(input_s.decode('utf-8',errors='replace'))
|
||||
|
||||
# 接收换行
|
||||
if self.checkBoxCRLF.isChecked():
|
||||
@ -483,48 +495,48 @@ class PyQt5Serial(QtWidgets.QWidget,Ui_UartAssistant):
|
||||
# 注意:每行数据可能不包含结尾的换行符,所以在处理前检查一下
|
||||
if line.endswith(b'\r'):
|
||||
line = line[:-1] # 移除回车
|
||||
# 写入当前日期的文件,打开文件,如果文件不存在则创建,如果存在则追加内容
|
||||
|
||||
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.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()
|
||||
|
||||
|
||||
|
||||
|
||||
#判断选择的何种格式数据
|
||||
if self.radioButtonCH4QX.isChecked() and self.lineUtf8[:2]=="A+":
|
||||
print(self.lineUtf8)
|
||||
if self.radioButtonCH4QX.isChecked():
|
||||
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)
|
||||
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
|
||||
print(lineUtf8)
|
||||
|
||||
if self.flag_draw:
|
||||
|
||||
self.update_data_thread.SetFlag(1)
|
||||
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))
|
||||
if isinstance(dataSplit, (float, int)):
|
||||
|
||||
self.filenameCsv= self.file + ".csv"
|
||||
if self.checkBoxAutoSaveCsv.isChecked() and self.CsvFlag: #写入CSV文件
|
||||
if self.checkBoxAutoSaveCsv.isChecked(): #写入CSV文件
|
||||
try:
|
||||
self.get_data_tf.SaveCsv(self.filenameCsv)
|
||||
self.get_data_tf.SaveCsv(self.filenameCsv,self.log_time)
|
||||
except:
|
||||
print("写入CSV失败")
|
||||
pass
|
||||
@ -537,31 +549,7 @@ class PyQt5Serial(QtWidgets.QWidget,Ui_UartAssistant):
|
||||
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))
|
||||
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))
|
||||
print("Data split failed, dataSplit type:",type(dataSplit))
|
||||
|
||||
except Exception as e:
|
||||
print(f"Error reading configuration: {e}")
|
||||
@ -581,7 +569,25 @@ class PyQt5Serial(QtWidgets.QWidget,Ui_UartAssistant):
|
||||
|
||||
self.data_num_received = 0
|
||||
self.lineEditSendNum.setText(str(self.data_num_received))
|
||||
|
||||
# 关联hex接收与保存csv,hex下不保存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):
|
||||
try:
|
||||
@ -607,6 +613,7 @@ class PyQt5Serial(QtWidgets.QWidget,Ui_UartAssistant):
|
||||
self.lineEditReceiveNum.setText(str(self.data_num_received))
|
||||
|
||||
#self.formGroupBox1.setTitle("串口状态(关闭)")
|
||||
#开始绘图
|
||||
def btn_start_clicked(self):
|
||||
#开启按钮
|
||||
|
||||
@ -620,28 +627,18 @@ class PyQt5Serial(QtWidgets.QWidget,Ui_UartAssistant):
|
||||
self.radioButtonOtherData.setEnabled(False)
|
||||
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:]
|
||||
print("iterm",iterm)
|
||||
self.comboBoxPlot.addItems(iterm)
|
||||
|
||||
elif self.radioButtonOtherData.isChecked():
|
||||
iterm = self.get_data_other.rowTitle[1:]
|
||||
print("iterm",iterm)
|
||||
self.comboBoxPlot.addItems(iterm)
|
||||
|
||||
#self.update_data_thread.SetPlotItem(0)
|
||||
iterm = self.get_data_tf.rowTitle[1:]
|
||||
print("iterm",iterm)
|
||||
self.comboBoxPlot.addItems(iterm)
|
||||
|
||||
self.update_data_thread.SetPlotItem(0)
|
||||
|
||||
self.update_data_thread.restart()
|
||||
self.CsvFlag = 1
|
||||
self.flag_draw = 1
|
||||
|
||||
|
||||
|
||||
|
||||
#停止绘图
|
||||
def btn_stop_clicked(self):
|
||||
self.update_data_thread.stop()
|
||||
self.pushButtonStartPlot.setEnabled(True)
|
||||
@ -651,22 +648,18 @@ class PyQt5Serial(QtWidgets.QWidget,Ui_UartAssistant):
|
||||
self.radioButtonOtherData.setEnabled(True)
|
||||
self.checkBoxAutoSaveCsv.setEnabled(False)
|
||||
self.comboBoxPlot.clear()
|
||||
self.CsvFlag = 0
|
||||
self.flag_draw = 0
|
||||
|
||||
def update_data_thread_slot(self, data):
|
||||
# 线程回调函数
|
||||
#data = json.loads(data)
|
||||
self.plot_qchart.handle_update(float(data))
|
||||
#print("thread ",data)
|
||||
|
||||
|
||||
def plot_item_changed(self,index):
|
||||
print(index)
|
||||
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_other.IndOfReturn(index)
|
||||
|
||||
def plot_reset(self):
|
||||
self.plot_qchart.zoomReset()
|
||||
@ -682,15 +675,110 @@ class PyQt5Serial(QtWidgets.QWidget,Ui_UartAssistant):
|
||||
if self.checkBox_return.isChecked():
|
||||
text = text + "\r\n"
|
||||
self.data_send(text)
|
||||
|
||||
def onButtonRightClicked(self, button_id):
|
||||
# 弹出一个对话框让用户输入新的按钮名称
|
||||
button = getattr(self, button_id)
|
||||
|
||||
|
||||
def CheckCfgIniData(self):
|
||||
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:')
|
||||
if ok and new_name:
|
||||
button.setText(new_name)
|
||||
|
||||
|
||||
|
||||
#执行
|
||||
if __name__ == '__main__':
|
||||
app = QtWidgets.QApplication(sys.argv)
|
||||
|
@ -14,7 +14,7 @@ from PyQt5 import QtCore, QtGui, QtWidgets
|
||||
class Ui_UartAssistant(object):
|
||||
def setupUi(self, UartAssistant):
|
||||
UartAssistant.setObjectName("UartAssistant")
|
||||
UartAssistant.resize(996, 694)
|
||||
UartAssistant.resize(999, 694)
|
||||
sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Expanding, QtWidgets.QSizePolicy.Expanding)
|
||||
sizePolicy.setHorizontalStretch(2)
|
||||
sizePolicy.setVerticalStretch(0)
|
||||
@ -430,7 +430,7 @@ class Ui_UartAssistant(object):
|
||||
self.scrollArea.setWidgetResizable(False)
|
||||
self.scrollArea.setObjectName("scrollArea")
|
||||
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.widget_8 = QtWidgets.QWidget(self.scrollAreaWidgetContents)
|
||||
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.horizontalLayout_17.addWidget(self.checkBox_return)
|
||||
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.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.verticalLayout_8 = QtWidgets.QVBoxLayout(self.layoutWidget2)
|
||||
self.verticalLayout_8.setContentsMargins(0, 0, 0, 0)
|
||||
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.horizontalLayout_16.addWidget(self.scrollArea)
|
||||
self.horizontalLayout_14.addWidget(self.splitter)
|
||||
@ -719,25 +539,5 @@ class Ui_UartAssistant(object):
|
||||
self.label_SendNum_4.setText(_translate("UartAssistant", "窗口标准差"))
|
||||
self.tabWidget.setTabText(self.tabWidget.indexOf(self.tab_2), _translate("UartAssistant", "曲线绘制"))
|
||||
self.label_8.setText(_translate("UartAssistant", "快捷指令"))
|
||||
self.checkBox_return.setText(_translate("UartAssistant", "添加\"回车换行\""))
|
||||
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"))
|
||||
self.checkBox_return.setText(_translate("UartAssistant", "添加\"\\r\\n\""))
|
||||
from PyQt5.QtChart import QChartView
|
||||
|
@ -6,7 +6,7 @@
|
||||
<rect>
|
||||
<x>0</x>
|
||||
<y>0</y>
|
||||
<width>996</width>
|
||||
<width>999</width>
|
||||
<height>694</height>
|
||||
</rect>
|
||||
</property>
|
||||
@ -670,7 +670,7 @@
|
||||
<bool>false</bool>
|
||||
</property>
|
||||
<property name="currentIndex">
|
||||
<number>1</number>
|
||||
<number>0</number>
|
||||
</property>
|
||||
<widget class="QWidget" name="tab">
|
||||
<attribute name="title">
|
||||
@ -1049,7 +1049,7 @@
|
||||
<x>0</x>
|
||||
<y>0</y>
|
||||
<width>241</width>
|
||||
<height>1000</height>
|
||||
<height>3000</height>
|
||||
</rect>
|
||||
</property>
|
||||
<widget class="QWidget" name="widget_8" native="true">
|
||||
@ -1072,7 +1072,7 @@
|
||||
<item>
|
||||
<widget class="QCheckBox" name="checkBox_return">
|
||||
<property name="text">
|
||||
<string>添加"回车换行"</string>
|
||||
<string>添加"\r\n"</string>
|
||||
</property>
|
||||
<property name="checked">
|
||||
<bool>true</bool>
|
||||
@ -1086,8 +1086,8 @@
|
||||
<rect>
|
||||
<x>12</x>
|
||||
<y>42</y>
|
||||
<width>236</width>
|
||||
<height>1000</height>
|
||||
<width>231</width>
|
||||
<height>3000</height>
|
||||
</rect>
|
||||
</property>
|
||||
<widget class="QWidget" name="layoutWidget">
|
||||
@ -1095,292 +1095,11 @@
|
||||
<rect>
|
||||
<x>12</x>
|
||||
<y>12</y>
|
||||
<width>218</width>
|
||||
<height>616</height>
|
||||
<width>201</width>
|
||||
<height>2801</height>
|
||||
</rect>
|
||||
</property>
|
||||
<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>
|
||||
<layout class="QVBoxLayout" name="verticalLayout_8"/>
|
||||
</widget>
|
||||
</widget>
|
||||
</widget>
|
||||
|
@ -9,13 +9,13 @@ Created on Tue May 28 15:40:48 2024
|
||||
|
||||
|
||||
import time,math,os
|
||||
import re,csv,datetime
|
||||
import re,csv
|
||||
|
||||
from PyQt5.QtCore import QThread, pyqtSignal,Qt
|
||||
from PyQt5.QtWidgets import QMessageBox
|
||||
from PyQt5.QtChart import QChart, QValueAxis, QSplineSeries,QLineSeries
|
||||
from PyQt5.QtGui import QPen
|
||||
from configparser import ConfigParser
|
||||
|
||||
|
||||
# 波形显示
|
||||
class QChartViewPlot(QChart):
|
||||
@ -112,7 +112,6 @@ class UpdateDataThread(QThread):
|
||||
super(UpdateDataThread, self).__init__(parent)
|
||||
self.is_exit = False
|
||||
self.x_range = 1024
|
||||
self.getDateQx = GetDataQX()
|
||||
self.flag = 0
|
||||
|
||||
|
||||
@ -169,264 +168,57 @@ 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(): #读取费加罗或者自定义数据
|
||||
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.regularIniPath = "regular.ini" # 配置文件默认路径
|
||||
self.headStr = ""
|
||||
self.rowTitle=[]
|
||||
self.buttons_config = [[None for _ in range(3)] for _ in range(20)]
|
||||
#存放快捷按键配置
|
||||
self.CheckCfgIniData() # 初始化配置文件
|
||||
self.csv_buffer = []
|
||||
|
||||
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(',')
|
||||
|
||||
|
||||
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):
|
||||
def SaveCsv(self,filenameCsv,num):
|
||||
# 打开一个文件用于写入,如果文件不存在则创建
|
||||
# 增加num 写入文件间隔
|
||||
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])
|
||||
|
||||
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:
|
||||
# 创建一个写入器对象
|
||||
writer = csv.writer(file)
|
||||
# 写入数据行
|
||||
writer.writerows(self.csv_buffer)
|
||||
self.csv_buffer.clear()
|
||||
|
||||
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')
|
||||
|
||||
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):
|
||||
if data[:2] ==self.headStr:
|
||||
|
||||
self.data2csv = self.regex.findall(data)
|
||||
|
||||
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.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}")
|
||||
|
Loading…
x
Reference in New Issue
Block a user