Вопрос по python, macos – Окно Matplotlib появляется сзади?

16

Всякий раз, когда я звонюshow() в matplotlib окно графика появляется позади всех других окон, и я должен свернуть все, чтобы увидеть его. Есть ли способ, которым я могу предотвратить это или программно вывести это на передний план. На OSX Lion. Python 2.7

Ваш Ответ

5   ответов
1

Что ж. Этот ответ представлен в комментариях к принятому ответу, но я думаю, что оно заслуживает отдельного места, так как оно хорошо решает проблему. Помимо проблемы автора, у меня, кроме того, была проблема с тем, что окно matplotlib не было в трее активных окон, поэтому я не мог переключиться на него с помощью<Alt>+<Tab>.

Изменение бэкэнда по умолчанию для matplotlibmacosx все решено Вы можете сразу попробовать в своем коде, как это:

import matplotlib
matplotlib.use("Qt5agg")

Qt5agg может не быть представлен в вашей системе, пожалуйста, выберите тот, который есть. Вы можете найти их:

import matplotlib.rcsetup as rcsetup
print(rcsetup.all_backends)

Если это помогло, вы можете изменить свой бэкэнд в конфигурации. Для этого сначала найдите его:

import matplotlib
matplotlib.matplotlib_fname()

Тогда поменяйbackend: значение:

backend      : macosx

к вашему бэкэнду. Я использовал в конце концов:

backend      : TkAgg
1

Разработчики Matplotlib, похоже, знают об этой проблеме. Но, глядя вhttps://github.com/matplotlib/matplotlib/issues/596 похоже, пройдет какое-то время, пока не будет найдено решение, по-видимому, потому что некоторые люди находят это раздражающим, что figure.show () & quot; steals & quot; пространство экрана.

0

Это может зависеть от ОС, но использование интерактивного построения графиков (которое наносит график, как только вы указываете) приводит к тому, что фигуры появляются на переднем плане, как толькоas they're made на Ubuntu:

import pylab as P
P.ion()
P.figure(1)
P.plot([1,2,3],[1,4,9])
0

У меня такая же настройка, как у nickponline. Что работает для меня это:

from pylab import get_current_fig_manager()
get_current_fig_manager().window.raise_()

Если у вас есть несколько цифр, это только увеличивает текущую активную. Для этого случая я обнаружил, что работает следующее:

fig1=figure(1)
cfm1=get_current_fig_manager().window

fig2=figure(2)
cfm2=get_current_fig_manager().window
...
cfm1.activateWindow()
cfm1._raise()
pause(.1)  # or something else that uses up some time
cfm2.activateWindow()
cfm2.raise_()
строка импорта имеет завершающий «()», также, по-видимому, в FigureManager больше нет свойства окна
1

Не совсем ответ на ваш вопрос, но я используюIPython вместо консоли Python по умолчанию. Когда запустил его сipython --pylab Я могу построить, например, набрав

>> plot([1,3,2])

и сюжет всплывет впереди. У этого также есть некоторые другие очень хорошие особенности;)

Я испытываю одинаковое поведение как с python, так и с ipython в моей системе 10.9.1, так что это не обязательно решение в каждом случае.
Решение @ NeilTraft работает для меня. Чтобы сделать бэкэнд по умолчанию для TkAgg, найдитеmatplotlibrc file и изменить линиюbackend: macosx вbackend: TkAgg
Update: Бэкэнд TkAgg не имеет той же проблемы; ему предоставляется окно верхнего уровня (то есть вы можете переключиться на него, используя Cmd-Tab). Он все еще начинается в нижней части z-порядка, но теперь ведет себя нормально. Я думаю, что должна быть ошибка в бэкэнде MacOSX в Mavericks.
Тоже самое. Я считаю, что у анддама та же проблема, что и у меня: окно matplotlibpermanently за всеми остальными окнами. Я не могу сфокусировать это, даже когда нажимаю на это в управлении миссией. Единственный обходной путь, который я до сих пор нашел, - это использовать управление полетом, чтобы временно опустить окно.into an empty space, затем переключитесь на это место, поместите окно в фокус, а затем перетащите окноback to my original spaceгде z-порядок будет, наконец, правильным (если я не нажму на любое другое окно, что заставит его немедленно вернуться обратно).

Похожие вопросы