¿Cómo muestro una ventana de figura de matplotlib encima de todas las demás ventanas en Spyder?

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

  •  21-12-2019
  •  | 
  •  

Pregunta

Estoy usando Spyder IDE y encuentro que las ventanas de figuras de matplotlib siempre se muestran detrás de otras ventanas.Por ejemplo, inmediatamente después de iniciar Spyder, si escribo plt.plot([0,1],[0,1]) en la consola, aparece un gráfico detrás de la ventana principal de Spyder.¿Cómo puedo hacer que las ventanas de nuevas figuras se muestren encima de todas las demás ventanas?

Encontré esta solución (hacer que la ventana de trazado de matplotlib aparezca como la activa), pero no me funciona en Spyder.me meto en problemas con fig.canvas.manager.window.Dice AttributeError: 'FigureManagerMac' object has no attribute 'window'.

¿Fue útil?

Solución

Bueno, encontré la solución cuando estaba trabajando en otra cosa.

Cuando uso el MacOSX backend, entonces fig.canvas.manager.window da AttributeError: 'FigureManagerMac' object has no attribute 'window'.Sin embargo, cuando uso el TkAgg backend, entonces fig.canvas.manager tiene el atributo window.Así puedo implementar esta sugerencia como sigue:

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)

Bastante simple, ¿verdad?La primera parte complicada es que debes configurar el backend antes de importar pyplot.En mi experiencia, cambiar el backend después no hace nada.La segunda parte complicada es que el script de inicio científico de Spyder import matplotlib.pyplot as plt justo cuando inicia Spyder IDE, por lo que no tiene posibilidad de configurar el backend antes de importar pyplot.La forma de solucionar esto es ir a Preferencias->Consola->Módulos externos, configurar el backend de la GUI en TkAgg y reiniciar Spyder.Entonces el código anterior funciona correctamente.

Anteriormente estaba configurando el backend a través de matplotlib.rcParams['backend'] = 'TkAgg' justo después de iniciar Spyder.Sin embargo, cuando estaba haciendo otra cosa, comencé a recibir errores que mencionaban el MacOSX back-end.Esto no tenía ningún sentido para mí, ya que pensé que estaba usando TkAgg.La parte enloquecedora es cuando pregunté. matplotlib.get_backend regresó TkAgg!Aparentemente, configurar el backend después de importar pyplot actúa como si hubiera cambiado el backend, pero en realidad no cambia el backend.Argg!!

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top