我正在尝试编写一个条件,在该条件下指定字典中的值会更改。但是,每次我将文件加载回原始值时。我想将新值保存到字典中,因此当再次加载文件时,将显示新值。
我曾尝试将其他python文件用于字典,但最终得到相同的结果。我也尝试了泡菜模块。没有成功任何帮助表示赞赏。
from tkinter import *
dict = {'Andrew': [67, 78, 98], 'William': [56, 90, 42], 'Anna': [90, 88, 75]}
andrew_var = DoubleVar()
change_first_grade = Entry(root, textvariable=var)
change_first_grade.pack()
andrew_var.set(0)
if andrew_var.get() != 0:
dict['Andrew'][0] = andrew_var.get()
当字典中的值更改时,如何保存该值,以便下次打开文件时在字典中具有新值。
答案 0 :(得分:0)
您可以将字典保存在pickle或JSON文件中,但是在保存之前,您必须从Entry获取值并将其放入字典中。它不会自动执行。
但是创建Entry
后就无法直接获得价值,因为它不是input()
,并且不会等待数据。函数mainloop()
启动窗口,然后在您看到窗口之前执行mainloop()
之前的所有操作。
您可以使用Button
来运行函数,将值放在Entry
中后将保存该函数。
import tkinter as tk
import json
def load():
global data
try:
with open('data.json') as f:
data = json.load(f)
except Exception as ex:
print(ex)
def save(event=None):
# update dictionary before save
data['Andrew'][0] = int(entry.get())
with open('data.json', 'w') as f:
json.dump(data, f)
# ---
data = {
'Andrew': [67, 78, 98],
'William': [56, 90, 42],
'Anna': [90, 88, 75]
}
# load at start
load()
root = tk.Tk()
entry = tk.Entry(root)
entry.pack()
entry.insert('end', data['Andrew'][0])
button = tk.Button(root, text='Save', command=save)
button.pack()
root.mainloop()
代替Button
,您可以bind()
键Enter
来启用save
,以便更新文件中的数据。
root = tk.Tk()
entry = tk.Entry(root)
entry.pack()
entry.insert('end', data['Andrew'][0])
entry.bind('<Return>', save)
root.mainloop()