私はTkinterでちょっとした試合をしていますが、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申し訳ありませんが、ゲームのインスタンスです、私はそれを私の質問に追加します –
Gameクラスのtkinter要素は保持しますか? – furas