Comment afficher une fenêtre de figure matplotlib au-dessus de toutes les autres fenêtres dans Spyder

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

  •  21-12-2019
  •  | 
  •  

Question

J'utilise l'IDE Spyder et je trouve que les fenêtres de figures matplotlib sont toujours affichées derrière d'autres fenêtres.Par exemple, immédiatement après avoir démarré Spyder, si je tape plt.plot([0,1],[0,1]) dans la console, j'obtiens un tracé derrière la fenêtre principale du Spyder.Comment puis-je afficher de nouvelles fenêtres de figures par-dessus toutes les autres fenêtres ?

J'ai trouvé cette solution (faire apparaître la fenêtre de traçage matplotlib comme étant active), mais cela ne fonctionne pas pour moi dans Spyder.J'ai des ennuis avec fig.canvas.manager.window.Ça dit AttributeError: 'FigureManagerMac' object has no attribute 'window'.

Était-ce utile?

La solution

Eh bien, je suis tombé sur la solution alors que je travaillais sur autre chose.

Quand j'utilise le MacOSX back-end, alors fig.canvas.manager.window donne AttributeError: 'FigureManagerMac' object has no attribute 'window'.Cependant, lorsque j'utilise le TkAgg back-end, alors fig.canvas.manager a l'attribut window.Ainsi, je peux mettre en œuvre cette proposition comme suit:

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)

Assez simple, non ?La première partie délicate est que vous devez définir le backend avant d'importer pyplot.Changer le backend par la suite ne fait rien d'après mon expérience.La deuxième partie délicate est que le script Scientific Startup de Spyder import matplotlib.pyplot as plt juste au moment où vous lancez l'IDE Spyder, vous n'avez donc aucune possibilité de définir le backend avant l'importation de pyplot.Pour contourner ce problème, allez dans Préférences->Console->Modules externes, définissez le backend de l'interface graphique sur TkAgg et redémarrez Spyder.Ensuite, le code ci-dessus fonctionne correctement.

Auparavant, je configurais le backend via matplotlib.rcParams['backend'] = 'TkAgg' juste après avoir lancé Spyder.Cependant, lorsque je faisais autre chose, j'ai commencé à recevoir des erreurs mentionnant le MacOSX back-end.Cela n'avait aucun sens pour moi, puisque je pensais utiliser TkAgg.Ce qui est exaspérant, c'est quand j'ai demandé matplotlib.get_backend il est revenu TkAgg!Apparemment, définir le backend après l'importation de pyplot agit comme si vous aviez modifié le backend, mais cela ne modifie pas réellement le backend.Argh !!

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top