从文本文件读取时如何更新 Tkinter 标签

How to update Tkinter label when reading from a text file

我是 python 的新手,非常感谢您的帮助。我正在尝试构建一个 gps 速度计并使用 Tkinter 制作一个 gui 来显示信息。我很难让 Tkinter 更新显示的文本。对于当前方法(未在下面的代码中显示),我有一个脚本 运行 并输出 2 个名为“MPH.txt”和“Time.txt”的文本文件,其值如“0.00”和“232445.500”分别。这种情况不断发生并覆盖旧文件。 这是我必须阅读并显示它们的代码。它会读取一次并显示正确的数据,但无论我采用何种方法强制它清除每个小部件中的文本,我都无法更新它。我可以关闭并打开 window,它会更新,但我想启动它并让它自行更新。

import serial
import tkinter as tk
import tkinter.font

win = tk.Tk()
win.title("GPS Speedometer")
win.geometry('1920x720')

i=1
while True:
        if i == 1:
                time_text=tk.Label(text="Current Time (UTC)").grid(row=0, col$
                with open("Time.txt", "r") as t:
                        tk.Label(win, text=t.read()).grid(row=1, column=0)
                        t.close()

                speed_text=tk.Label(text="Current Speed (Knots)").grid(row=2,$
                with open("MPH.txt", "r") as s:
                        tk.Label(win, text=s.read()).grid(row=3, column=0)
                        s.close()

                exitButton=tk.Button(win, text='exit', command=win.destroy).g$
                i=i-1
        else:
                i=i+1

        tk.mainloop()

您不能在 GUI 中使用 while 或 for 循环,因为它会干扰 GUI 的主循环。您必须使用 after 方法将代码添加到主循环。像这样(加上许多其他修复):

import tkinter as tk

def loop():
    with open("Time.txt", "r") as t:
        time_text.config(text=t.read())
    with open("MPH.txt", "r") as s:
        speed_text.config(text=s.read())
    win.after(500, loop) # run every 500 milliseconds

win = tk.Tk()
win.title("GPS Speedometer")

# using 2 lines per label is very important to make this work!
lbl=tk.Label(text="Current Time (UTC)")
lbl.grid(row=1, column=0)
time_text = tk.Label(win, text='loading')
time_text.grid(row=1, column=1)

lbl=tk.Label(text="Current Speed (Knots)")
lbl.grid(row=2,column=0)
speed_text = tk.Label(win, text='loading')
speed_text.grid(row=2, column=1)

exitButton=tk.Button(win, text='exit', command=win.destroy)
exitButton.grid()

loop() # start your loop
tk.mainloop() # start the mainloop