сделать всплывающее окно с графикой matplotlib активным - PullRequest
33 голосов
/ 20 ноября 2011

Я работаю с Python и Matplotlib на Mac OS X.Когда я работаю над множеством разных окон, и мне нужно запустить скрипт, который создает график, окно графика всегда открыто за активным окном и очень разочаровывает необходимость переключения между окнами для просмотра изображения.Есть ли какая-то причина, чтобы определить местоположение окна графика и / или открыть его в качестве окна переднего плана?

спасибо

Ответы [ 9 ]

14 голосов
/ 14 мая 2015

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

import matplotlib
matplotlib.use('TkAgg')  

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

13 голосов
/ 06 июня 2013

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

get_current_fig_manager().window.raise_()

или

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

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

4 голосов
/ 01 октября 2014

Я обнаружил, что это решение было так часто необходимо (например, при использовании Spyder IDE), я обернул его в функцию.

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_()
3 голосов
/ 14 октября 2013

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

Для MacOS Sierra и Python 3.6, Matplotlib 2.0.0

get_current_fig_manager().show()

приведенная выше строка не выполняет никакой работы.

1 голос
/ 04 октября 2015

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

(протестировано на 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()
0 голосов
/ 11 декабря 2018

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

backend      : MacOSX

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

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

0 голосов
/ 16 июля 2018

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

plt.gcf().canvas.get_tk_widget().focus_force() 
0 голосов
/ 27 декабря 2016

Начиная с 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()
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...