2011-05-12 6 views
1

Pour apprendre tkinter je fais un simple programme de jeu Go. Maintenant je voudrais être en mesure d'enregistrer un jeu en utilisant cornichon, mais je reçois quand j'essaie de décaper mon objet GoBoardModel:problème avec cornichon et tkinter

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

Je suppose que cela vient du fait que si l'interface graphique et le modèle de déplacement Les planches sont assez bien séparées, le modèle a toujours une référence à la vue afin de pousser quelques trucs, donc le cornichon essaie probablement de découdre quelques trucs de tk. Bien sûr, je voudrais décaper uniquement le modèle, donc est-il possible de dire au pickle de ne pas se soucier de cette référence à l'interface graphique? Ou une autre façon de contourner le problème?

Je sais que je pouvais me débarrasser de cette référence, mais je suis ici pour en savoir :)

Répondre

3

Eh oui, regardez dans la méthode __getstate__.

Par exemple, si vous voulez cornichon ignorer l'attribut « vue », vous feriez les suivantes:

class Whatever(object): 

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