Сохранение настроек в Python

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

Файл:

from tkinter import *
from tkinter.filedialog import *
from tkinter.messagebox import *
from random import randint

class App(object):
    def __init__(self):
        self.key = [3, 1, 4, 1, 5]
        self.root = Tk()
        self.root.title("Шифр")
        self.master = self.root
        m = Menu(self.root)
        self.root.config(menu=m)
        fm = Menu(m)
        m.add_cascade(label="File",menu=fm)
        fm.add_command(label="Open...",command=self.open_file)
        fm.add_command(label="Save",command=self._save)
        fm.add_command(label="Exit",command=self.close_win)
        hm = Menu(m)
        m.add_cascade(label="Help",menu=hm)
        hm.add_command(label="About",command=self.about)
        cm = Menu(m)
        m.add_cascade(label="Color",menu=cm)
        cm.add_command(label="Default",command=self.colorD)
        cm.add_command(label="Red",command=self.colorR)
        cm.add_command(label="Green",command=self.colorG)
        cm.add_command(label="Blue",command=self.colorB)
        ym = Menu(m)
        m.add_cascade(label="Font",menu=ym)
        ym.add_command(label="Default",command=self.font12)
        ym.add_command(label="15pt",command=self.font15)
        ym.add_command(label="18pt",command=self.font18)
        ym.add_command(label="21pt",command=self.font21)
        sm = Menu(m)
        m.add_cascade(label="Size",menu=sm)
        sm.add_command(label="500x500",command = lambda:self.master.geometry('500x500'))
        sm.add_command(label="800x600",command = lambda: self.master.geometry('800x600'))
        sm.add_command(label="1024x768",command = lambda: self.master.geometry('1024x768'))
        self.txt = Text(self.root, font=('Arial',12))
        self.txt.pack()
        self.btn_enc = Button(self.root, command=self.encode, text = 'Зашифровать')
        self.btn_enc.pack()
        self.btn_dec = Button(self.root, command=self.decode, text = 'Расшифровать')
        self.btn_dec.pack()
    def open_file(self):
        self.txt.delete('1.0',END)
        self.txt.insert(INSERT, askopenfile().read())
    def _save(self):
      sa = asksaveasfilename()
      letter = self.txt.get(1.0,END)
      f = open(sa,"w")
      f.write(letter)
      f.close()    
    def about(self):
      showinfo("Editor", "Шифр")     
    def close_win(self):
      if askyesno("Exit", "Do you want to save the file?"):
            self._save()
            self.root.destroy()
      else:
            self.root.destroy()
    def colorD(self):
      self.txt.config(bg="white", fg="black")
    def colorR(self):
      self.txt.config(bg="crimson", fg="yellow")
    def colorG(self):
      self.txt.config(bg="springgreen", fg="blue")
    def colorB(self):
      self.txt.config(bg="skyblue", fg="dark violet")
    def font12(self):
        self.txt.config(font=('Arial',12))
    def font15(self):
        self.txt.config(font=('Arial',15))
    def font18(self):
        self.txt.config(font=('Arial',18))
    def font21(self):
        self.txt.config(font=('Arial',21))
    def encode(self):
            #Не важная часть
    def decode(self):
        #Не важная часть
    def on_execute(self):
        self.root.mainloop()

if __name__ == '__main__':
    app = App()
    app.on_execute()

Ответы (1 шт):

Автор решения: Smart Beetle

Вам надо сделать словарь со всеми данными. Примерно такой: {'color':'red', 'font': 'Arial 15'}.Используйте json файлы для хранения там этого словаря. В питоне присутствует модуль json для работы с json файлами. Узнайте об этом модуле в документации(вам понадобятся команды dump, load).Смысл таков: Изначально вы этот словарь загружаете из файла json.И когда создается окно, то вы подставляете значения из этого словаря .А когда пользователь меняет цвет, то вы меняете словарь и загружаете новый словарь в json файл вместо старого.

→ Ссылка