Come faccio a visualizzare una finestra di figure matplotlib sopra tutte le altre finestre in Spyder

StackOverflow https://stackoverflow.com//questions/20025077

  •  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'.

È stato utile?

Soluzione

Bene, mi sono imbattuto nella soluzione mentre stavo lavorando su qualcos'altro.

Quando utilizzo il MacOSX backend, quindi fig.canvas.manager.windowAttributeError: '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!!

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top