проблема с рассолом и ткинтером - PullRequest
1 голос
/ 12 мая 2011

Для изучения tkinter я создаю простую игровую программу на Go.Теперь я хотел бы иметь возможность сохранить игру с помощью инструмента pickle, но когда я пытаюсь выбрать объект GoBoardModel, я получаю:

PicklingError: Can't pickle 'tkapp' object: <tkapp object at 0x01FCB090>

Я предполагаю, что это происходит из-за того, что в то время как графический интерфейс имодель игрового поля довольно хорошо отделена, модель все еще имеет ссылку на представление для того, чтобы подтолкнуть некоторые вещи, так что рассол, вероятно, пытается засолить некоторые вещи тк.Конечно, я хотел бы описать только модель, так есть ли способ сказать, чтобы она не заботилась об этой ссылке на GUI?Или другой способ обойти проблему?

Я знаю, что мог бы просто избавиться от этой ссылки, но я здесь, чтобы узнать:)

1 Ответ

4 голосов
/ 12 мая 2011

Да, посмотрите на метод __getstate__.

Например, если вы хотите, чтобы pickle игнорировал атрибут 'view', вы должны сделать следующее:

class Whatever(object):

  def __getstate__(self):
    state = self.__dict__.copy()
    del state['view']
    return state
...