Сохранение пользовательских настроек при выходе из приложения

#python #user-interface #tkinter

Вопрос:

В моей программе есть меню настроек, которое позволяет изменять разрешение окна и цвет шрифта. При выходе эти пользовательские настройки должны быть сохранены, и вам не нужно их изменять при перезапуске приложения.

Код:

 from tkinter import *
class App(object):
   def __init__(self):
      self.root = Tk()
      self.master = self.root
      m = Menu(self.root)
      self.root.config(menu=m)
      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)
      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()
  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="green", fg="blue")
  def colorB(self):
      self.txt.config(bg="skyblue", fg="dark violet")
  def on_execute(self):
      self.root.mainloop()
if __name__ == '__main__':
  app = App()
  app.on_execute()
 

Комментарии:

1. Сохраните настройки пользователя в переменных типа self.bg , а self.fg затем в конце просто сохраните их в файл. В следующий раз, когда вы откроете программу, прочитайте файл и вызовите соответствующую функцию.

2. Когда я записываю переменные в файл, они перезаписывают друг друга. Можете ли вы объяснить, как это сделать правильно?

3. что вы имеете в виду, когда они перезаписывают, просто запишите все настройки в файл, когда программа остановится, таким образом, все будет перезаписано со всем. причина, по которой они перезаписываются, заключается в том, что вы используете, вероятно w , режим записи, и он перезаписывается, вы можете использовать a режим добавления, но лучше, если вы просто запишете все настройки в файл, поэтому прочитайте их, сохраните в переменной, измените или добавьте в переменную, а затем запишите всю переменную обратно в файл

4. @Matiiss Использовать режим добавления-не лучшая идея, потому что каждый раз, когда пользователь изменяет настройки, файл настроек будет увеличиваться. Это означает, что файл может стать довольно большим, особенно при большом количестве настроек.

5. Хорошо, большое вам спасибо

Ответ №1:

Это один из способов хранения настроек пользователя:

 import pickle
settings = {"bg": "red", "fg": "blue"}

# Save the settings to the file
with open("filename", "wb") as file:
    file.write(pickle.dumps(settings))

# Open the settings from the file
with open("filename", "rb") as file:
    loaded_settings = pickle.loads(file.read())
 

Он использует модуль pickle для сохранения и загрузки словаря настроек.