Ich versuche, meine Füße nass mit Gurke zu bekommen, so schreibe ich ein wenig Beispielcode wie folgt aus:Verwenden Gurke einen Zustand für die Klasse zu laden
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()
So ist das Ziel dieser Anwendung ist, wenn ich getroffen die Plus-Taste, wird eine zunehmende Anzahl auf dem Bildschirm angezeigt. Und wenn ich es speichere, schließe das Fenster, öffne es wieder und drücke die Lade-Taste, ich sehe, wann ich das letzte Mal die Nummer erhöht habe. Ich bin sehr neu für Gurke, und der aktuelle Code gibt diese zurück zu mir:
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
Ich frage mich, was das Problem hier ist. Außerdem sehe ich eine Menge Tutorials oder Beispielcode online, die tut Dinge wie:
with open('save_game.dat', 'wb') as f:
player= pickle.load
Was bedeutet with
bedeuten?
[ '' 'with''' in der docs] (https://docs.python.org/3/reference/compound_stmts.html#the-with-statement) - wenn sie mit einem Dateiobjekt verwendet Es stellt sicher, dass die Datei geschlossen wird, selbst wenn eine Ausnahme ausgelöst wird. Es gibt viele Referenzen online, diese könnte helfen - http://effbot.org/zone/python-with-statement.htm. Hier ist ein SO Q & A - http://stackoverflow.com/q/1369526/2823755 – wwii
Normalerweise sollten Sie immer die komplette Traceback in Ihre Fragen buchen. – wwii
'' 'def __getstate __ (self):' '' sieht problematisch aus - was gibt es zurück, wenn man es * manuell * nennt? – wwii