繁体   English   中英

如何实时更新 GUI 中文本文件中的变量? Python 和 tkinter

[英]How to update variables from a text file in a GUI in real time? Python and tkinter

我有一个脚本可以不断更新同一目录中文本文件上的数字。 我使用 tkinter 制作了一个 GUI 来显示这些数字。 我很难让 GUI 实时更新数字。 它将显示 GUI 首次启动时的数字,但不会随着文本文件的更改而更新显示。 这里有一些基本的代码来演示:

def read_files(file, line):
    old = open(f'{file}.txt', 'r').readlines()[line]
    new = old.replace('\n', '')
    return new

number = read_files('Statistics', 0)
number_label = Label(frame1, text=f'{number}')
number_label.grid(row=0, column=0)

上面的代码显示了文本文件中的数字,就像 GUI 首次打开时一样。 但是,它不会随着文本文件中的值更改而更新数字。 我做了一些阅读,还尝试了以下方法:

def read_files(file, line):
    old = open(f'{file}.txt', 'r').readlines()[line]
    new = old.replace('\n', '')
    return new

number = read_files('Statistics', 0)
number_label = StringVar()
number_label.set(number)
number_display = Label(frame1, text=f'{number_label.get()}')
number_display.grid(row=0, column=0)

这具有相同的效果。 它显示在打开 GUI 时从文本文件中检索到的值,但不会随着文本文件的更新而更新它。 任何帮助表示赞赏。

由于没有完整的代码,看一下这个例子:

from tkinter import *

root = Tk()

def update_gui():
    number = read_files('Statistics', 0) # Call the function
    number_display.config(text=number) # Change the text of the label, also same as text=f'{number}'
    root.after(1000,update_gui) # Repeat this function every 1 second

def read_files(file, line):
    old = open(f'{file}.txt', 'r').readlines()[line]
    new = old.replace('\n', '')
    return new

number_display = Label(root) # Empty label to update text later
number_display.grid(row=0, column=0)

update_gui() # Initial call to the function

root.mainloop()

Here the label is created outside the function but the text is not given, but inside the function we are repeating the function every 1 second, with after , and changing the text of the label with config method. 我已经避免使用StringVar()因为它在这里没有用,你可以将它存储在一个普通变量中并使用它。


以下是如何使用after抄袭

def after(self, ms, func=None, *args):
    """Call function once after given time.

    MS specifies the time in milliseconds. FUNC gives the
    function which shall be called. Additional parameters
    are given as parameters to the function call.  Return
    identifier to cancel scheduling with after_cancel."""

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM