要学习tkinter,我正在制作一个简单的Go游戏程序。我现在希望能够使用泡菜保存游戏,但是当我尝试泡菜时,我GoBoardModel得到:
GoBoardModel
PicklingError: Can't pickle 'tkapp' object: <tkapp object at 0x01FCB090>
我猜这是由于以下事实:尽管GUI和go board的模型被很好地分开了,但是该模型仍然具有对视图的引用以推送某些内容,因此pickle可能会尝试腌制一些tk的内容。当然,我只想对模型进行腌制,是否有任何方法可以使腌制不在乎对GUI的引用?还是解决该问题的另一种方法?
我知道我可以摆脱这个参考,但是我在这里学习:)
是的,看看__getstate__方法。
__getstate__
例如,如果您希望泡菜忽略“视图”属性,则可以执行以下操作:
class Whatever(object): def __getstate__(self): state = self.__dict__.copy() del state['view'] return state