在 Python 中使用 Qt Designer 接口实时读取串行数据
Posted
技术标签:
【中文标题】在 Python 中使用 Qt Designer 接口实时读取串行数据【英文标题】:Reading serial data in real time using Qt Designer interface in Python 【发布时间】:2022-01-11 18:26:12 【问题描述】:我正在尝试使用 Python 开发的接口从我的 Uart 端口实时读取数据。为此,我重复发送我的命令并在 500 毫秒后读取 MCU 响应。 但是,我所做的没有用。除非线程完成,否则使用线程实时读取数据的函数不会向我显示结果。你能帮忙吗?
PS:我知道代码不是很干净。
这是阅读功能
def uart_read_data_permanently(self, mesurementbox):
"""
Reads permanently the Data received from the host controller to the PC
:return: None
"""
serial_connect.flush() # it is buffering. required to get the data out
answer = ""
while True:
serial_connect.write(("getCurrent" + '\n').encode("utf-8"))
time.sleep(0.5)
answer += serial_connect.readline().decode("utf-8")
print(answer)
mesurementbox.mesurements_textedit.append(f'>> Scanning results: answer' + '\n')
这是我创建线程的 uart 连接函数: 我需要发送的命令是“getcurrent”
def uart_send_data(self):
"""
Sends a command via UART from the PC to the host controller
and waits for a response
:return: None
"""
cmd_name = self.cmd_combo.currentText()
cmd_name = cmd_name.strip()
if cmd_name in cmd_list:
if cmd_name == "version":
cmd_parameter = self.cmd_parameters_combo.currentText()
if cmd_parameter in cmd_parameters_list:
serial_connect.write((cmd_name + '\n' + cmd_parameter + '\n').encode())
self.console.append(f'>> Sending command cmd_name for cmd_parameter')
else:
self.console.append(f'>> Sending command')
self.console.append(f'Missing configuration')
self.console.append(f'Please select a valid command and parameter')
return
time.sleep(0.1)
t1 = threading.Thread(target=self.uart_read_data)
t1.daemon = True
t1.start()
elif cmd_name == "getCurrent":
self.console.append(f'>> Sending command "cmd_name"')
ui_mesurements = mesurementsDialog()
ui_mesurements.setupUi(mesurements)
mesurements.show()
t2 = threading.Thread(target=self.uart_read_data_permanently(ui_mesurements))
t2.daemon = True
t2.start()
else:
serial_connect.write((cmd_name + '\n').encode("utf-8"))
self.console.append(f'>> Sending command "cmd_name"')
time.sleep(0.1)
t1 = threading.Thread(target=self.uart_read_data)
t1.daemon = True
t1.start()
else:
self.console.append(f'>> cmd_name Unknown. Please select a valid command')
【问题讨论】:
我不久前做了一个小 gui 程序,听起来它做的事情非常相似。代码真的很乱,但它的工作相当一致。 esp8266.com/viewtopic.php?f=22&t=20775 你没有运行 RTOS,Python 完全不适合 RT 任务。那么,您希望实现什么? 【参考方案1】:对于那些关心或面临与我所面临的问题相同的问题的人。答案是: 查看 QTimer
【讨论】:
以上是关于在 Python 中使用 Qt Designer 接口实时读取串行数据的主要内容,如果未能解决你的问题,请参考以下文章
PySide2(Qt for Python)在 Linux 上的 Qt Designer 安装在哪里?
Qt Designer和Python在单独的functions.py中运行一个函数[重复]
Qt Designer UI (python) 到 JSON
为啥qt designer设计界面和用python运行得到的不一样?