Как обновить значение словаря на основе виджета Entry: Tkinter - PullRequest
0 голосов
/ 10 июля 2019

Я пытаюсь написать условие, при котором значение в указанном словаре изменяется.Однако каждый раз, когда я загружаю файл обратно в исходное значение.Я хотел бы сохранить новое значение в словаре, поэтому, когда файл загружается снова, новое значение будет показано. Любая помощь приветствуется.

Я пытался использовать другой файл 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 голосов
/ 13 июля 2019

Вы можете хранить словарь в файле 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()
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...