【发布时间】:2015-11-05 00:53:18
【问题描述】:
我目前正在尝试让我的程序在用户按下按钮后更新 Pickle 字典中的字符串。每当我尝试更新该字符串时,什么都没有发生。我做错了什么?
保存/加载/默认值:
BACKGROUNDCOLOR = ('#000000')
FOREGROUNDCOLOR = ('#FFFFFF')
default = ('default')
setupcomplete = ('False')
data = {
'background_color' : BACKGROUNDCOLOR,
'foreground_color' : FOREGROUNDCOLOR,
'complete_setup' : setupcomplete,
'user_name' : default
}
def load():
print('load')
with open("./Minetick_Data/datasave", "rb") as f:
data = pickle.load(f)
def save():
print('save')
with open("./Minetick_Data/datasave", "wb") as f:
pickle.dump(data, f)
def update():
setupcomplete = 'True'
save()
这是我尝试更新数据的地方['complete_setup']/setupcomplete:
class ProgramSetup(tk.Frame):
def __init__(self, parent, controller):
tk.Frame.__init__(self, parent)
ProgramSetup.configure(self, background = BACKGROUNDCOLOR)
titleLabel = tk.Label(self, text = "Program Setup", font = TITLE_FONT, background = BACKGROUNDCOLOR, foreground = FOREGROUNDCOLOR)
finishButton = tk.Button(self, text = "Finish", command = lambda: combine_funcs(update, controller.show_frame(StartPage)))
titleLabel.pack(padx = 10, pady = 10)
finishButton.pack(padx = 10)
不过,每当我启动程序时,它都会以默认值启动(假而不是真)
【问题讨论】:
-
可能是因为您使用的是
'False'而不是False。第一个是字符串,第二个是布尔值。与True相同。 -
我没有运行你的代码,但我认为问题是当你运行
data = pickle.load(f)时,这一步完全改变了第一个data字典的值。我什至没有在您的摘录中看到正确使用data字典。 -
您是否按下“完成”按钮?
-
是的,我正在按下“完成”按钮,但它似乎不起作用。该按钮加载下一页并运行 Update() 函数,但不更新字典。
-
据我所知,您发布的代码中没有任何地方更改
data。此外,电话ProgramSetup.configure似乎很奇怪。这应该是self.configure吗?
标签: python python-3.x tkinter pickle