Come faccio a visualizzare una finestra di figure matplotlib sopra tutte le altre finestre in Spyder
-
21-12-2019 - |
Domanda
Sto utilizzando l'IDE Spyder e trovo che le finestre delle figure di matplotlib vengano sempre visualizzate dietro altre finestre.Ad esempio, subito dopo aver avviato Spyder, se scrivo plt.plot([0,1],[0,1])
nella console, ottengo una trama dietro la finestra principale di Spyder.Come posso fare in modo che le nuove finestre delle figure vengano visualizzate sopra tutte le altre finestre?
Ho trovato questa soluzione (fai apparire la finestra di disegno di matplotlib come quella attiva), ma per me non funziona in Spyder.Ho dei problemi con fig.canvas.manager.window
.Dice AttributeError: 'FigureManagerMac' object has no attribute 'window'
.
Soluzione
Bene, mi sono imbattuto nella soluzione mentre stavo lavorando su qualcos'altro.
Quando utilizzo il MacOSX
backend, quindi fig.canvas.manager.window
dà AttributeError: 'FigureManagerMac' object has no attribute 'window'
.Tuttavia, quando utilizzo il TkAgg
backend, quindi fig.canvas.manager
ha l'attributo window
.Quindi, posso implementare questo suggerimento come segue:
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)
Abbastanza semplice, vero?La prima parte difficile è che devi impostare il backend prima di importare pyplot.Secondo la mia esperienza, cambiare il backend in seguito non fa nulla.La seconda parte difficile è che lo script Scientific Startup di Spyder lo fa import matplotlib.pyplot as plt
proprio quando avvii l'IDE Spyder, quindi non hai la possibilità di impostare il backend prima che pyplot venga importato.Il modo per aggirare questo problema è andare su Preferenze->Console->Moduli esterni, impostare il backend della GUI su TkAgg e riavviare Spyder.Quindi il codice sopra funziona correttamente.
In precedenza stavo impostando il backend tramite matplotlib.rcParams['backend'] = 'TkAgg'
subito dopo aver avviato Spyder.Mentre stavo facendo qualcos'altro, tuttavia, ho iniziato a ricevere errori che menzionavano the MacOSX
back-end.Questo non aveva alcun senso per me, dal momento che pensavo di usarlo TkAgg
.La parte esasperante è quando ho chiesto matplotlib.get_backend
è tornato TkAgg
!Apparentemente, l'impostazione del backend dopo l'importazione di pyplot agisce come se avessi cambiato il backend, ma in realtà non cambia il backend.Argg!!