【问题标题】:How to update Tkinter label when reading from a text file从文本文件读取时如何更新 Tkinter 标签
【发布时间】:2020-11-29 23:35:31
【问题描述】:

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

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()

【问题讨论】:

    标签: python user-interface tkinter live


    【解决方案1】:

    您不能在 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
    

    【讨论】:

    • 非常感谢!非常感谢您帮助我准确地告诉我如何去做!
    猜你喜欢
    • 2021-04-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-09-01
    • 2014-04-23
    相关资源
    最近更新 更多