2013-11-16 5 views
3

Я использую ID Spyder IDE, и я обнаружил, что окна фигур matplotlib всегда отображаются за другими окнами. Например, сразу после запуска Spyder, если я нахожу plt.plot([0,1],[0,1]) в консоли, я получаю заговор за главным окном Spyder. Как я могу сделать отображение новых фигурных окон сверху всех остальных окон?Как отобразить окно фигуры matplotlib поверх всех остальных окон в Spyder

Я нашел это решение (make matplotlib plotting window pop up as the active one), но оно не работает для меня в Spyder. У меня проблемы с fig.canvas.manager.window. Он говорит AttributeError: 'FigureManagerMac' object has no attribute 'window'.

+0

Был такой же вопрос. Вот решение: http://stackoverflow.com/a/32934536/5406821 – DomenR

+0

Похоже, вам нужно настроить SpyderPrefs на использование Qt4Agg или какого-либо другого не-MacOS-сервера для matplotlib. Работает для меня после этого. – Demis

ответ

8

Хорошо, я столкнулся с решением, когда работал над чем-то другим.

Когда я использую сервер MacOSX, тогда fig.canvas.manager.window дает AttributeError: 'FigureManagerMac' object has no attribute 'window'. Однако, когда я использую backend TkAgg, то fig.canvas.manager имеет атрибут window. Таким образом, можно реализовать this suggestion следующим образом:

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) 

достаточно просто, не так ли? Первая сложная часть - вы должны установить бэкэнд перед импортом pyplot. Изменяя бэкэнд впоследствии, я ничего не делаю в своем опыте. Вторая сложная часть - сценарий Scientific Startup от Spyder делает import matplotlib.pyplot as plt сразу при запуске IDE Spyder, поэтому у вас нет шансов установить бэкэнд перед вводом в эксплуатацию. Путь вокруг этого идет в Preferences-> Console-> External Modules, установите GUI Backend в TkAgg и перезапустите Spyder. Затем приведенный выше код работает правильно.

Раньше я устанавливал сервер через matplotlib.rcParams['backend'] = 'TkAgg' сразу после запуска Spyder. Однако, когда я делал что-то еще, я начал получать ошибки, которые упоминали бэкенд MacOSX. Это не имело для меня никакого смысла, поскольку я думал, что использую TkAgg. Сумасшедшая часть, когда я запросил matplotlib.get_backend, он вернул TkAgg! По-видимому, установка бэкэнда после импорта pyplot действует так, как если бы вы изменили бэкэнд, но на самом деле он не меняет бэкэнд. Argg !!

+2

(* Spyder dev здесь *) Я рад, что вы сами разобрались, как исправить свою проблему. У меня есть несколько слов о «matplotlib» backends: на Mac мы решили установить его на «MacOSX», независимо от пользовательских настроек, потому что это самый надежный, но, учитывая ваше замешательство, я думаю, нам нужно пересмотреть это решение. Я сделаю это для нашего предстоящего выпуска 2.3 :) –