Подтвердить что ты не робот

Сделать всплывающее окно matplotlib в качестве активного

Я работаю с python и matplotlib на mac os x. Когда я работаю над множеством разных окон, и мне нужно запустить script, который создает сюжет, окно графика всегда открывается за активным окном и очень неприятно переключается между окнами для просмотра изображения. Почему бы вам не решить, где находится окно графика, и/или всплывать в качестве окна переднего плана?

спасибо

4b9b3361

Ответ 1

Меня беспокоила точно такая же проблема. Наконец, я нашел решение (в режиме pylab с поддержкой qt4agg):

get_current_fig_manager().window.raise_()

или

fig = gcf()
fig.canvas.manager.window.raise_()

С уважением, Маркус

Ответ 2

Для меня (OSX 10.10.2, Matplotlib 1.4.3), то, что работает, изменяет бэкенд matplotlib на TkAgg. Перед импортом pyplot или чего-нибудь, перейдите:

import matplotlib
matplotlib.use('TkAgg')  

Теперь появятся всплывающие окна и могут быть Command-Tab'ed.

Ответ 3

Я нашел, что это решение так часто необходимо (например, при использовании 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_()

Ответ 4

Я нашел хороший ответ в этой теме: Как заставить окно 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)

Ответ 5

Это сработало для меня!

(протестировано в 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()

Ответ 6

Для MacOS Sierra и python 3.6, Matplotlib 2.0.0

get_current_fig_manager().show()

приведенная выше строка не нуждается ни в чем другом.

Ответ 7

Как и в случае с 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()

Ответ 8

У меня работают только следующие (с бэкэндом TkAgg):

plt.gcf().canvas.get_tk_widget().focus_force() 

Ответ 9

Вы можете установить

backend      : MacOSX

в вашем файле matplotlibrc для постоянного решения.

У меня работает на macos mojave, с matplotlib 2.1.2. Тем не менее, другие пользователи жаловались, что это не работает для них, так что это может повлиять на другие настройки