Matplotlib:如何重新打开一个关闭的图形?

8

在Matplotlib中是否有可能重新打开已关闭的图形(即用户使用X关闭的图形)?以下代码展示了一种简单的做法:

In [14]: fig = figure(10)

In [15]: close(fig)

In [16]: fig.show()

Exception in Tkinter callback
Traceback (most recent call last):
  File "/Library/Frameworks/Python.framework/Versions/2.6/lib/python2.6/lib-tk/Tkinter.py", line 1410, in __call__
    return self.func(*args)
  File "/Library/Frameworks/Python.framework/Versions/2.6/lib/python2.6/lib-tk/Tkinter.py", line 495, in callit
    func(*args)
  File "/Library/Frameworks/Python.framework/Versions/2.6/lib/python2.6/site-packages/matplotlib/backends/backend_tkagg.py", line 253, in idle_draw
    self.draw()
  File "/Library/Frameworks/Python.framework/Versions/2.6/lib/python2.6/site-packages/matplotlib/backends/backend_tkagg.py", line 239, in draw
    tkagg.blit(self._tkphoto, self.renderer._renderer, colormode=2)
  File "/Library/Frameworks/Python.framework/Versions/2.6/lib/python2.6/site-packages/matplotlib/backends/tkagg.py", line 19, in blit
    tk.call("PyAggImagePhoto", photoimage, id(aggimage), colormode, id(bbox_array))
TclError: this isn't a Tk application

我正在尝试创建一个带小部件的图形,因此有一个可行的解决方法(只需创建一个新图形),但我想知道figure实例在关闭后是否完全无用。

1个回答

0

是的,关闭图形会完全删除它。


6
实际上,这完全不正确。关闭图形会销毁GUI工具包(确切地说取决于后端)的窗口对象,但不会破坏图形对象。图形对象仍然存在,并且在关闭图形之后您仍然可以保存它(例如,fig.savefig(...) 在关闭图形后仍然可以正常工作)。 - Joe Kington
2
然而,我所指的是通过GUI关闭图形界面,而不是调用fig.close()(这会破坏一些东西)。 - Joe Kington
@JoeKington - 我感兴趣的实际上是这种情况:当用户通过GUI关闭窗口时。我放上面的MWE,因为我假设close(fig)和“按X”是一样的。如果我按x并尝试'fig.show()',我会得到相同的异常。 - keflavich
@keflavich - 很抱歉我没有答案。但是,我怀疑任何答案都将非常依赖于gui后端(可能不适用于所有后端),重新创建你提到的图形将是最简单的方法。 - Joe Kington

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接