在 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运行得到的不一样?

Qt Designer 使用 Python 3.5 而不是 Python 3.7

Qt Designer的预览ui在python中运行时不一样