tkinter,csv文件,自动更新

798qvoo8  于 2022-12-06  发布在  其他
关注(0)|答案(1)|浏览(190)

我希望得到帮助,请,我想反映的变化,立即对csv文件,而不关闭窗口。换句话说,我想一个实时更新窗口,每次有人添加或更改的东西,在csv文件。

import csv

root=Tk()
root.geometry('500x500')
with open('FILE.csv') as file:
    reader = csv.reader(file)
    for row in reader:
        
        label= Label(root, text=row)
        label.pack()
root.mainloop()
jhdbpxl9

jhdbpxl91#

首先编写一个只刷新屏幕的函数,然后编写另一个检查文件是否发生更改的函数,如果发生更改,则调用刷新函数,最后安排定期调用该函数。
为了更容易地删除旧数据,请将标签放在专用框架中。然后,您可以轻松地遍历所有子项以删除旧数据。
在下面的示例中,数据将出现在csv_frame中。刷新帧的函数名为refresh,它采用要读取的文件的名称。函数auto_refresh也采用文件的名称和mtime(修改时间)。它将检查当前mtime是否已更改,如果已经运行,则调用refresh。然后,它计划自己在一秒钟内再次运行。将初始mtime设置为-1,强制auto_refresh第一次调用refresh

import tkinter as tk
import os.path
import csv

def refresh(filename):

    for child in csv_frame.winfo_children():
        child.destroy()

    with open(filename) as csvfile:
        reader = csv.reader(csvfile)
        for row in reader:
            label = tk.Label(csv_frame, text=", ".join(row))
            label.pack(side="top", anchor="w")

def auto_refresh(filename, last_mtime=-1):
    mtime = os.path.getmtime(filename)
    if mtime > last_mtime:
        refresh(filename)
    root.after(1000, auto_refresh, filename, mtime)

root = tk.Tk()
csv_frame = tk.Frame(root)
csv_frame.pack(side="top", fill="both", expand=True)

auto_refresh("/tmp/FILE.csv")

root.mainloop()

相关问题