gpt4 book ai didi

python - Tkinter Python 从串行数据中持续更新标签?

转载 作者:太空宇宙 更新时间:2023-11-03 15:20:42 26 4
gpt4 key购买 nike

我尝试使用以下代码执行的操作是从arduino串行读取并每隔几秒用该数据更新标签。

当我运行代码时,它只获取/更新标签一次。所以我知道它与循环有关。我的理解是,Tk()mainloop() 之间的所有代码都在循环中。任何帮助将不胜感激。

from Tkinter import *
import serial
import time

def show_values():
arduinoSerialData.write("55")#Write some data to test Arduino read serial and turn on LED if it does

arduinoSerialData = serial.Serial('/dev/cu.usbmodem1461', 9600, timeout=None)
time.sleep(5) #Arduino Serial Reset Timeout


Joes = Tk()
Joes.wm_title("Read Serial")
myData= arduinoSerialData.readline()
temp = float(myData) #convert string to float store in var
templabel = Label(Joes, text=(temp))
templabel.pack()
c = Button(Joes, text="Send Data", command=show_values)
c.pack()
time.sleep(2)
Joes.mainloop()

最佳答案

看来您误解了 TK 主循环的工作原理。正如您所描述的,它不是调用 Tk()mainloop() 之间的循环,而是在 Tkinter 内、程序代码外部。

为了有一个循环来更新标签,您必须使用 Tk 的 after 方法专门编写一个循环,一遍又一遍地调用可迭代函数。

你可以创建一个像这样的函数来完成你想要的事情:

def update_label():
data= float(arduinoSerialData.readline())

templabel.config(text=str(data)) #Update label with next text.

Joes.after(1000, update_label)
#calls update_label function again after 1 second. (1000 milliseconds.)

我不确定如何检索 arduino 数据,因此您可能需要稍微修改一下以获得正确的数据。不过,这是按照您所描述的方式创建循环的一般前提。

关于python - Tkinter Python 从串行数据中持续更新标签?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43574216/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com