从文本文件读取时如何更新 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
我是 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