如何基于Entry小部件更新字典值:Tkinter

时间:2019-07-10 09:46:08

标签: python dictionary tkinter

我正在尝试编写一个条件,在该条件下指定字典中的值会更改。但是,每次我将文件加载回原始值时。我想将新值保存到字典中,因此当再次加载文件时,将显示新值。

我曾尝试将其他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()

当字典中的值更改时,如何保存该值,以便下次打开文件时在字典中具有新值。

1 个答案:

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