【问题标题】:TypeError: can't pickle MplCanvas objectsTypeError:无法腌制 MplCanvas 对象
【发布时间】:2025-12-12 17:20:03
【问题描述】:

我正在尝试将一个相当复杂的对象保存为一个看起来像这样的文件

import methods
import vars
import matplotlib
import numpy

class Awesome:
    def __init__(self, canvasHandle, x, y):
        self.alpha = 'jada'
        self.bravo = 'bla'
        self.graphic, = canvasHandle.ax.plot(x,y,'r-')
        ... 
    def show(self):
        self.graphic.set_visible(True)
    def hide(self):
        self.graphic.set_visible(False)

但是,当我用

运行 dill
with open('awesome.job', 'wb') as outputFile:
    dill.dump(self.awesome), outputFile)

我得到错误:

TypeError: can't pickle MplCanvas objects

无论里面有什么,我怎样才能将该对象保存到文件中?可读性并不重要,它只需要转储内存并使其恢复活力......

【问题讨论】:

  • 您的对象应该存储图形(您在这里称为canvasHandle)。例如。 self.fig = fig 在 init 方法中。

标签: python matplotlib typeerror dump dill


【解决方案1】:

我找到了解决方案: 我现在只传递包含的图形对象,而不是传递画布对象(我这样做是为了使用“mpl_connect”捕获事件)。使用“mpl_connect”捕获事件也适用于图形画布,不仅是更高级别的画布(因此无需传递它)。现在莳萝保存对象没有错误!

【讨论】: