Я делаю небольшую игру с Tkinter, и у нее есть функция сохранения с использованием pickle. Однако, когда я пытаюсь сохранить, он выдает следующее сообщение;Pickle не работает с tkinter
Exception in Tkinter callback
Traceback (most recent call last):
File "C:\Python34\lib\tkinter\__init__.py", line 1533, in __call__
return self.func(*args)
File "C:\Users\Benedict\Documents\Python\Migrant Simulator\MigSim 2016.10\migrant-stimulator.py", line 260, in save
pickle.dump(self.game,file)
_pickle.PicklingError: Can't pickle <class 'tkapp'>: attribute lookup tkapp on __main__ failed
Дело в том, данные я пытаюсь рассол содержит ничего Tkinter, связанных, так что я не понимаю, почему он говорит, что это <class 'tkapp'>
Вот краткое изложение соответствующих битов кода:
...
class Game(object):
def __init__(self,name,nodes={},start=None,history=[]):
self.name=name
self.nodes=nodes
self.start=start
self.history=history
class App:
def __init__(self, master):
self.master=master
...
def save(self):
if self.file_name==None:
self.save_as()
file=open(self.file_name,'wb')
pickle.dump(self.game,file) # self.game is an instance of the Game class defined elsewhere
print(str(type(self.game)))
file.close()
def save_as(self):
self.file_name=filedialog.asksaveasfilename()
self.save()
...
root = Tk()
app = App(root)
root.mainloop()
Как это исправить? Я попытался изменить __getstate__
, как это было предложено в соответствующем вопросе, но это не сработало.
РЕДАКТИРОВАТЬ: Не обращайте внимания, оказывается, что в глубине моей структуры данных я оставил BooleanVar.
Что такое 'self.game'? – furas
@furas извините, это экземпляр игры, я добавлю его на свой вопрос –
. Вы сохраняете какие-либо элементы tkinter в Game-классе? – furas