Wie zeige ich ein Matplotlib-Figurenfenster über allen anderen Fenstern in Spyder an?
-
21-12-2019 - |
Frage
Ich verwende die Spyder-IDE und stelle fest, dass Matplotlib-Figurenfenster immer hinter anderen Fenstern angezeigt werden.Zum Beispiel direkt nach dem Start von Spyder, wenn ich tippe plt.plot([0,1],[0,1])
In der Konsole erhalte ich eine Handlung hinter dem Hauptfenster von Spyder.Wie kann ich dafür sorgen, dass neue Figurenfenster über allen anderen Fenstern angezeigt werden?
Ich habe diese Lösung gefunden (Lassen Sie das Matplotlib-Plotfenster als aktives Popup-Fenster erscheinen), aber es funktioniert bei mir in Spyder nicht.Ich habe Probleme damit fig.canvas.manager.window
.Es sagt AttributeError: 'FigureManagerMac' object has no attribute 'window'
.
Lösung
Nun, ich bin zufällig auf die Lösung gestoßen, als ich an etwas anderem gearbeitet habe.
Wenn ich das verwende MacOSX
Backend also fig.canvas.manager.window
gibt AttributeError: 'FigureManagerMac' object has no attribute 'window'
.Wenn ich jedoch das verwende TkAgg
Backend also fig.canvas.manager
hat das Attribut window
.Somit kann ich es umsetzen dieser Vorschlag wie folgt:
import matplotlib
matplotlib.use('TkAgg')
import matplotlib.pyplot as plt
fig = plt.figure()
plt.plot([0,1],[0,1])
#Put figure window on top of all other windows
fig.canvas.manager.window.attributes('-topmost', 1)
#After placing figure window on top, allow other windows to be on top of it later
fig.canvas.manager.window.attributes('-topmost', 0)
Ganz einfach, oder?Der erste knifflige Teil besteht darin, dass Sie das Backend festlegen müssen, bevor Sie Pyplot importieren.Nachträgliches Ändern des Backends bringt meiner Erfahrung nach nichts.Der zweite knifflige Teil ist das Scientific Startup-Skript von Spyder import matplotlib.pyplot as plt
direkt beim Starten der Spyder-IDE, sodass Sie keine Möglichkeit haben, das Backend festzulegen, bevor Pyplot importiert wird.Um dies zu umgehen, gehen Sie zu „Einstellungen“ > „Konsole“ > „Externe Module“, stellen Sie das GUI-Backend auf „TkAgg“ ein und starten Sie Spyder neu.Dann funktioniert der obige Code ordnungsgemäß.
Zuvor habe ich das Backend über eingestellt matplotlib.rcParams['backend'] = 'TkAgg'
direkt nach dem Start von Spyder.Als ich jedoch etwas anderes tat, bekam ich Fehlermeldungen, die das erwähnten MacOSX
Backend.Das ergab für mich keinen Sinn, da ich dachte, ich würde es verwenden TkAgg
.Der wahnsinnigste Teil ist, als ich nachgefragt habe matplotlib.get_backend
es kam zurück TkAgg
!Anscheinend wirkt das Festlegen des Backends nach dem Importieren von Pyplot so, als ob Sie das Backend geändert hätten, aber es ändert nicht wirklich das Backend.Argg!!