Хорошо, я столкнулся с решением, когда работал над чем-то другим.
Когда я использую сервер 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 !!
Был такой же вопрос. Вот решение: http://stackoverflow.com/a/32934536/5406821 – DomenR
Похоже, вам нужно настроить SpyderPrefs на использование Qt4Agg или какого-либо другого не-MacOS-сервера для matplotlib. Работает для меня после этого. – Demis