【问题标题】:Read analog value from Arduino and display it on a Tkinter GUI in real time从 Arduino 读取模拟值并在 Tkinter GUI 上实时显示
【发布时间】:2020-06-09 08:56:11
【问题描述】:

我正在尝试创建一个 Python Tkinter GUI,以便通过串行通信在 Arduino 和 PC 之间进行简单的数据传输(我正在使用 pySerial 包)。我可以正确地从 GUI 输入数据并将数据发送到 Arduino。在单独的代码文件中,我也可以正确读取从 Arduino 发送的数据,但是将这种实时数据读取功能集成到 Tkinter GUI 程序中并在 GUI 上显示时遇到了问题。从我的实验来看,要正确读取从 Arduino 发送的数据,读取需要循环运行。 Tkinter 也有自己的循环。因此,为了避免陷入数据读取循环,我一直在尝试使用 concurrent.futures 并行运行它们,但它仍然无法按我的意愿工作。请帮忙!

这是我的代码:https://drive.google.com/file/d/1xHOV-qXjg2iEA-PXa52d1_66bOpdbnzv/view?usp=sharing (请理解我仍在学习 Python、Tkinter 和多处理。因此在约定和术语上可能存在一些错误。)

这就是 GUI 的样子: Arduino-PC Serial Communication GUI

【问题讨论】:

标签: python tkinter arduino python-multiprocessing pyserial


【解决方案1】:

Tkinter 窗口有一个 after 方法,可用于运行您自己的代码作为 Tkinter 循环的一部分,例如:

from tkinter import Tk

window = Tk()

def do_something():
    print("doing something!")
    window.after(1000, do_something)  # every 1000 milliseconds

# start the do_something function immediately when the window starts
window.after(0, do_something)

window.mainloop()

【讨论】:

  • 我刚刚成功地将这种方法用于我的代码。谢谢!我想使用多处理,因为一些帖子指出 after() 方法有一些性能缺陷,尽管没有给出关于这些缺陷的详细信息。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-09-04
  • 2021-03-28
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多