使用 pickle 和 tkinter 保存数据供以后使用
Saving data with pickle and tkinter for later use
这是我的代码:
import pickle
from tkinter import *
from tkinter.messagebox import *
Game = Tk()
Gold = 0
Multiply = 1
def Save():
with open('objs.pickle', 'wb') as f:
pickle.dump([Gold, Multiply], f)
def Load():
with open('objs.pickle', 'rb') as f:
return pickle.load(f)
def ClickButton():
global Gold
print(Gold)
Gold +=1 * (Multiply)
Load()
GoldButton = Button(Game, height = 15, width = 25, text="Click!", command ClickButton, bg = "purple")
GoldButton.place(x = 160, y = 95)
save = Button(Game, height = 15, width = 25, text="Click to Save", command = Save)
save.place(x = 380, y = 95)
Game.resizable(width=False, height = False)
Game.geometry('700x450')
Game.title("Gold Farm")
我想要它做什么:
- 从 Pickle 文件中加载变量 "Gold" 和 "Multiply"
- 关闭时将新信息保存到文件中(Gold and Multiply)
它的问题是,当我用文件中的变量重新打开程序时,它只是将 Gold 和 Multiply 设置为它们的默认值,而不管
这里有什么问题?我该如何修复?
您正在丢弃正在加载的数据。 Load
函数不会将数据保存到变量,它只是 returns 加载的内容。
您需要保存从 Load
返回的值:
try:
Gold, Multiply = Load()
except IOError:
Gold, Multiply = 0, 1
这是我的代码:
import pickle
from tkinter import *
from tkinter.messagebox import *
Game = Tk()
Gold = 0
Multiply = 1
def Save():
with open('objs.pickle', 'wb') as f:
pickle.dump([Gold, Multiply], f)
def Load():
with open('objs.pickle', 'rb') as f:
return pickle.load(f)
def ClickButton():
global Gold
print(Gold)
Gold +=1 * (Multiply)
Load()
GoldButton = Button(Game, height = 15, width = 25, text="Click!", command ClickButton, bg = "purple")
GoldButton.place(x = 160, y = 95)
save = Button(Game, height = 15, width = 25, text="Click to Save", command = Save)
save.place(x = 380, y = 95)
Game.resizable(width=False, height = False)
Game.geometry('700x450')
Game.title("Gold Farm")
我想要它做什么:
- 从 Pickle 文件中加载变量 "Gold" 和 "Multiply"
- 关闭时将新信息保存到文件中(Gold and Multiply)
它的问题是,当我用文件中的变量重新打开程序时,它只是将 Gold 和 Multiply 设置为它们的默认值,而不管
这里有什么问题?我该如何修复?
您正在丢弃正在加载的数据。 Load
函数不会将数据保存到变量,它只是 returns 加载的内容。
您需要保存从 Load
返回的值:
try:
Gold, Multiply = Load()
except IOError:
Gold, Multiply = 0, 1