2015-12-05 4 views
8

Ich verwende Python v2.7 und matplotlib v1.5.0 unter Mac OS X Yosemite. Bis vor kurzem konnte ich mein Skript im interaktiven Interpreter ausführen, ein Diagramm anzeigen und dann das Fenster manuell beenden. Zum BeispielMatplotlib-Plot-Fenster kann nicht manuell geschlossen werden

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

Dies verwendet, um gut zu funktionieren. Das Fenster wurde geschlossen und ich kehrte zur Eingabeaufforderung zurück. Wenn ich nun das rote X drücke, um das Fenster zu schließen, bleibt das Fenster geöffnet. Meine Eingabeaufforderung kehrt zurück und funktioniert gut, aber das Fenster hängt fest und ich sehe den sich drehenden Wasserball darüber.

enter image description here

(Beachten Sie, dass der Cursor nicht im Bild angezeigt wird, aber Sie können das rote X wird abgeblendet, weil ich in der Nähe getroffen habe, aber es ist offen stecken).

Erst nachdem ich das Skript ein zweites Mal ausgeführt habe, schließt sich das erste Fenster, aber dann stecke ich mit einem zweiten offenen Plot mit demselben Problem fest. Ich bin ein bisschen verwirrt, weil das erst kürzlich passiert ist. Bis jetzt würde das Fenster gut schließen.

Es ist kein großes Problem, denn Python läuft immer noch und ich kann immer noch neue Plots machen, aber ich bin neugierig, warum das Fenster plötzlich offen bleiben würde. Irgendein Rat?

UPDATE

löste ich das Problem, indem Sie die interaktive Backend wechseln. Entweder Qt4Agg oder TkAgg als interaktives Backend löst das Problem. Aber die Frage bleibt, warum die Macosx- und CocoaAgg-Backends dieses Verhalten zeigen.

+0

Bitte melden Sie dies als Fehler im MPL-Problem Tracker. Ich vermute, was passiert ist, dass Sie a) Sie sind nicht im interaktiven Modus, so dass die GUI-Ereignisschleife nicht im Hintergrund läuft b) gibt es eine Reihenfolge der Operationen Problem, wenn Sie das Fenster schließen, die GUI-Ereignisschleife zuvor gestoppt wurde Es kann die Reinigung beenden, nachdem es selbst ist. – tacaswell

+0

Können Sie Ihr Update als Antwort geben und es dann als gelöst wählen? Dies wird anderen Menschen helfen, die das gleiche Problem haben. – gabra

+0

Fertig. Frage beantwortet und das Problem wurde auf GitHub in den MPL-Issue-Tracker gestellt. – Nate

Antwort

5

Ich löste das Problem, indem ich das interaktive Backend wechselte. Entweder Qt4Agg oder TkAgg als interaktives Backend löst das Problem.

+1

Ok, diejenigen, die dies tun möchten, überprüfen Sie dies: http://stackoverflow.com/questions/3285193/how-to-switch-backends-in-matplotlib-python – Rohit

8

Für eine dauerhafte Lösung (ich würde lieber nicht Backends wechseln jedes Mal, wenn ich Ipython öffne) können Sie matplotlibrc ändern.

Es gibt verschiedene matplotlibrc Dateien, die geändert werden können (d. H. Nur für ein lokales Verzeichnis oder global usw.). Verwenden Sie matplotlib.matplotlib_fname(), um die Konfigurationsdatei zu finden, die für Ihre ipython-Sitzung geladen wurde. Hier ist, was ich habe:

In [1]: import matplotlib 

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

Öffnen der rc-Datei und ändert die Zeile:

backend  : macosx 

zu lesen:

backend  : Qt4Agg 

den Trick für mich getan hat.

Verwandte Themen