2012-03-08 11 views
6

Czy możliwe jest ponowne otwarcie zamkniętej figury (tj. Jednego użytkownika X'd) w matplotlib? Poniższy kod pokazuje naiwne podejście:Matplotlib: otwórz ponownie zamkniętą figurę?

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 

Próbuję stworzyć postać z widgetami w nim, więc obejście jest dostępny (tylko utworzyć nowy rysunek), ale chciałbym wiedzieć, czy figure instancja jest całkowicie bezużyteczna po zamknięciu.

+0

możliwy duplikat [Matplotlib: jak wyświetlić figurę, która została zamknięta] (http://stackoverflow.com/questions/31729948/matplotlib-how-to-show-a-figure-that-has-been- zamknięte) –

Odpowiedz

0

Tak, zamknięcie rysunku powoduje usunięcie go całkowicie.

+3

Właściwie to nie jest prawdą. Zamknięcie postaci niszczy obiekt okna GUI (dokładnie to, co zależy od obiektu okna), ale nie obiekt figurki. Obiekt figury nadal istnieje i nadal możesz go zapisać (np. 'Fig.savefig (...)' nadal będzie działał idealnie po zamknięciu figury.) –

+2

Jednak mam na myśli zamknięcie figury przez gui, nie przez wywołanie 'fig.close()' (co niszczy rzeczy). –

+0

@JoeKington - Tak naprawdę to mnie interesuje: kiedy użytkownik zamyka okno przez GUI. Umieściłem powyższy MWE, ponieważ założyłem, że blisko (rys.) I "naciskając X" zrobił to samo. Jeśli naciśniesz x i spróbuję 'fig.show()', otrzymam ten sam wyjątek. – keflavich

Powiązane problemy