Я пытаюсь получить мои ноги мокрые с рассол, поэтому я пишу немного образец кода, как это:Используйте маринад для загрузки состояния для класса
class start(tk.Frame):
def __init__(self,*args,**kwargs):
tk.Frame.__init__(self,*args,**kwargs)
frame = tk.Frame(self,width=600,height=600)
self.val = 0
self.plusButton = tk.Button(self,text="plus",command=self.plus)
self.plusButton.pack()
self.valLabel = tk.Label(self)
self.valLabel.pack()
self.saveButton = tk.Button(self,text="save",command=self.save)
self.saveButton.pack()
self.loadButton = tk.Button(self,text="load",command=self.load)
self.loadButton.pack()
def load(self):
self.__dict__ = pickle.load(open("testtesttest.p", "rb"))
def plus(self):
self.val += 1
self.valLabel.config(text="%d"%(self.val))
def save(self):
pickle.dump(self.__getstate__, open("testtesttest.p", "wb"))
def __getstate__(self):
return self.__getstate__
if __name__=='__main__':
root = tk.Tk()
start(root).pack()
root.mainloop()
Таким образом, цель этого приложения, когда я ударил плюс, на экране будет увеличиваться число. И если я его сохраню, закройте окно, откройте его и нажмите кнопку загрузки, я увижу последний раз, когда число увеличилось. Я новичок в рассоле, и текущий код дает это ко мне спиной:
Exception in Tkinter callback
Traceback (most recent call last):
File "/Library/Frameworks/Python.framework/Versions/3.5/lib/python3.5/tkinter/__init__.py", line 1550, in __call__return self.func(*args)
File "/Users/caoanjie/pickleDemotry.py", line 18, in load
self.__dict__ = pickle.load(open("testtesttest.p", "rb"))pickle.
UnpicklingError: state is not a dictionary
Интересно, что проблема здесь. Кроме того, я вижу много учебники или образец кода в Интернете, что делает такие вещи, как:
with open('save_game.dat', 'wb') as f:
player= pickle.load
Что with
значит?
[ '' 'with''' в Документах] (https://docs.python.org/3/reference/compound_stmts.html#the-with-statement) - при использовании с файловым объектом , он гарантирует, что файл закрыт, даже если возникает исключение. В Интернете есть много ссылок, которые могут помочь - http://effbot.org/zone/python-with-statement.htm. Вот так Q & A - http://stackoverflow.com/q/1369526/2823755 – wwii
Как правило, вы всегда должны публиковать полный ответ в своих вопросах. – wwii
'' 'def __getstate __ (self):' '' выглядит проблематично - что он возвращает, если вы его назовете * вручную *? – wwii