2015-12-05 28 views
8

Sto eseguendo Python v2.7 e matplotlib v1.5.0 su Mac OS X Yosemite. Fino a poco tempo fa, ero in grado di eseguire il mio script nell'interprete interattivo, mostrare un grafico e quindi uccidere manualmente la finestra. Ad esempioImpossibile chiudere manualmente la finestra plot matplotlib

import numpy as np 
x = np.arange(1,10) 
y = np.arange(1,10) 
plt.plot(x,y) 
plt.show() 

Questo funzionava correttamente. La finestra si chiudeva e tornavo al prompt. Tuttavia, ora quando colpisco la X rossa per chiudere la finestra, la finestra rimane aperta. Il mio prompt dei comandi ritorna e funziona bene, ma la finestra è bloccata e vedo il pallone da spiaggia rotante su di esso.

enter image description here

(Si noti che il cursore non appare nell'immagine, ma si può vedere la X rossa è grigio perché ho colpito vicino, ma è bloccato aperto).

Solo dopo aver eseguito lo script una seconda volta la prima finestra viene chiusa, ma poi sono bloccato con una seconda trama aperta con lo stesso problema. Sono un po 'confuso perché questo è successo solo di recente. Fino ad ora, la finestra si chiudeva bene.

Non è un problema enorme, perché Python è ancora in esecuzione e posso ancora creare nuovi grafici, ma sono curioso di sapere perché la finestra si sarebbe improvvisamente aperta. Qualche consiglio?

UPDATE

ho risolto il problema passando backend interattivo. Qt4Agg o TkAgg come backend interattivo risolve il problema. Ma la domanda rimane il motivo per cui i backend Macosx e CocoaAgg mostrano questo comportamento.

+0

Segnala questo come un bug nel mpl tracker di problemi. Sospetto che ciò che sta accadendo sia che tu sia a) non sei in modalità interattiva quindi il ciclo di eventi della GUI non viene eseguito in background b) c'è un problema di ordine operativo quando chiudi la finestra, il loop di eventi della GUI viene arrestato prima può finire di pulire dopo se stesso. – tacaswell

+0

Puoi fornire il tuo aggiornamento come risposta e poi votarlo come risolto? Ciò aiuterà le altre persone che hanno lo stesso problema. – gabra

+0

Fatto. Risposta alla domanda e il problema è stato inviato al tracker dei problemi di mpl su GitHub. – Nate

risposta

5

Ho risolto il problema passando il backend interattivo. Qt4Agg o TkAgg come backend interattivo risolve il problema.

+1

Ok, quelli che cercano di fare questo check-out questo: http://stackoverflow.com/questions/3285193/how-to-switch-backends-in-matplotlib-python – Rohit

8

Per una soluzione permanente (preferisco non dover passare a ritroso ogni volta che apro ipython) è possibile modificare matplotlibrc.

Ci sono vari file matplotlibrc che possono essere modificati (vale a dire solo per una directory locale, o globalmente, ecc.). Per trovare il file di configurazione che è stato caricato per la tua sessione ipython, usa matplotlib.matplotlib_fname(). Ecco quello che ho ottenuto:

In [1]: import matplotlib 

In [2]: matplotlib.matplotlib_fname() 
Out[2]: u'/usr/local/lib/python2.7/site-packages/matplotlib/mpl-data/matplotlibrc' 

Aprendo il file rc e cambiare la linea:

backend  : macosx 

per leggere:

backend  : Qt4Agg 

ha fatto il trucco per me.

Problemi correlati