Ответ 1
Меня беспокоила точно такая же проблема. Наконец, я нашел решение (в режиме pylab с поддержкой qt4agg):
get_current_fig_manager().window.raise_()
или
fig = gcf()
fig.canvas.manager.window.raise_()
С уважением, Маркус
Я работаю с python и matplotlib на mac os x. Когда я работаю над множеством разных окон, и мне нужно запустить script, который создает сюжет, окно графика всегда открывается за активным окном и очень неприятно переключается между окнами для просмотра изображения. Почему бы вам не решить, где находится окно графика, и/или всплывать в качестве окна переднего плана?
спасибо
Меня беспокоила точно такая же проблема. Наконец, я нашел решение (в режиме pylab с поддержкой qt4agg):
get_current_fig_manager().window.raise_()
или
fig = gcf()
fig.canvas.manager.window.raise_()
С уважением, Маркус
Для меня (OSX 10.10.2, Matplotlib 1.4.3), то, что работает, изменяет бэкенд matplotlib на TkAgg. Перед импортом pyplot или чего-нибудь, перейдите:
import matplotlib
matplotlib.use('TkAgg')
Теперь появятся всплывающие окна и могут быть Command-Tab'ed.
Я нашел, что это решение так часто необходимо (например, при использовании IDE Spyder), я завернул его в функцию.
def show_plot(figure_id=None):
if figure_id is None:
fig = plt.gcf()
else:
# do this even if figure_id == 0
fig = plt.figure(num=figure_id)
plt.show()
plt.pause(1e-9)
fig.canvas.manager.window.activateWindow()
fig.canvas.manager.window.raise_()
Я нашел хороший ответ в этой теме: Как заставить окно Tkinter перейти на передний план?
В принципе, идея состоит в том, чтобы использовать атрибуты окна - установить для атрибута '-topmost' значение True (1), чтобы окно появилось на переднем плане, а затем установите для него значение False (0), чтобы позднее оно позволяло другим окнам чтобы предстать перед ним. Здесь код, который работал у меня:
import matplotlib.pyplot as plt
wm = plt.get_current_fig_manager()
wm.window.attributes('-topmost', 1)
wm.window.attributes('-topmost', 0)
Это сработало для меня!
(протестировано в Mac OS X 10.11, Spyder 2.3.5.2 - Python 3.4)
Перейдите в раздел "Настройки" > "Консоль IPython" > "Графика" и установите бэкэнд на Qt (после этого вам необходимо перезапустить ядро).
Создайте файл, содержащий:
def raise_window(figname=None):
if figname: plt.figure(figname)
cfm = plt.get_current_fig_manager()
cfm.window.activateWindow()
cfm.window.raise_()
и импортировать его при запуске (Предпочтения > Консоль IPython > Запуск > Запустить файл). Теперь просто подпишите код raise_window()
под своим кодом.
Пример:
import numpy as np
import matplotlib.pyplot as plt
X = np.linspace(-np.pi, np.pi, 256)
C, S = np.cos(X), np.sin(X)
plt.figure()
plt.plot(X, C)
plt.plot(X, S)
raise_window()
Для MacOS Sierra и python 3.6, Matplotlib 2.0.0
get_current_fig_manager().show()
приведенная выше строка не нуждается ни в чем другом.
Как и в случае с matplotlib 1.5.1 на MacOSX 10.11.6, если вы запустите оболочку iPython (5.0.0, Python: 3.5.2) и используйте % matplotlib вы можете принести график matplotlib на передний план, используя:
>>> %matplotlib
Using matplotlib backend: MacOSX
>>> import matplotlib.pyplot as plt
>>> plt.plot([1,3,2,4])
>>> plt.show()
** Изменить: совет кажется не использовать% pylab, поскольку он загрязняет глобальное пространство имен **
.. shell и используйте %pylab
, вы можете принести график matplotlib вперед, используя:
>>> %pylab
Using matplotlib backend: MacOSX
Populating the interactive namespace from numpy and matplotlib
>>> plot([1,3,2,4])
>>> show()
У меня работают только следующие (с бэкэндом TkAgg):
plt.gcf().canvas.get_tk_widget().focus_force()
Вы можете установить
backend : MacOSX
в вашем файле matplotlibrc
для постоянного решения.
У меня работает на macos mojave, с matplotlib 2.1.2. Тем не менее, другие пользователи жаловались, что это не работает для них, так что это может повлиять на другие настройки