Как отобразить окно рисунка matplotlib поверх всех остальных окон в Spyder?

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

  •  21-12-2019
  •  | 
  •  

Вопрос

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

Я нашел это решение (сделать всплывающее окно построения графика matplotlib активным), но у меня в Spyder это не работает.у меня проблемы с fig.canvas.manager.window.Там написано AttributeError: 'FigureManagerMac' object has no attribute 'window'.

Это было полезно?

Решение

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

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

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.По моему опыту, последующее изменение бэкэнда ничего не дает.Вторая сложная часть заключается в том, что сценарий научного запуска Spyder import matplotlib.pyplot as plt сразу при запуске Spyder IDE, поэтому у вас не будет возможности настроить серверную часть до импорта pyplot.Чтобы обойти эту проблему, перейдите в «Настройки» -> «Консоль» -> «Внешние модули», установите для GUI Backend значение TkAgg и перезапустите Spyder.Тогда приведенный выше код работает правильно.

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top