web-dev-qa-db-ja.com

matplotlibプロットウィンドウをアクティブなウィンドウとしてポップアップさせる

私はpythonとmac os xでmatplotlibを使用しています。多くの異なるウィンドウで作業していて、プロットを生成するスクリプトを実行する必要がある場合、プロットウィンドウは常にプロットの後ろで開きます画像を表示するためにウィンドウを切り替える必要があり、プロットウィンドウの場所を決定したり、前景ウィンドウとしてポップアップしたりするのはなぜですか。

ありがとう

35
Luca Fiaschi

まったく同じ問題に悩まされました。私は最終的に解決策を見つけました(pytlabモードで、qt4aggバックエンドを使用):

get_current_fig_manager().window.raise_()

または

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

よろしく、Markus

13
mrossi

私(OSX 10.10.2、Matplotlib 1.4.3)で機能するのは、matplotlibバックエンドをTkAggに変更することです。 pyplotなどをインポートする前に、次のようにします。

import matplotlib
matplotlib.use('TkAgg')  

プロットウィンドウがポップアップし、Command-Tabで移動できるようになりました。

15
Peter

私はこのソリューションが非常に頻繁に必要であることに気づき(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_()
4
raysabr

私はこのスレッドで良い答えを見つけました: 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)
3
antoniorohit

MacOS Sierraおよびpython 3.6、Matplotlib 2.0.0

import matplotlib.pyplot as plt
plt.get_current_fig_manager().show()

上記の行は他に何も必要としない仕事をします。

2
H S Rathore

これは私のために働いた!!

(Mac OS X 10.11、Spyder 2.3.5.2でテスト済み-Python 3.4)

Preferences> IPython console> Graphicsに移動し、バックエンドを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()
_
1
DomenR

私にとっては、次の作品のみ(TkAggバックエンドを使用):

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

設定できます

backend      : MacOSX

永続的な解決策として、matplotlibrcファイル内。

Macp mojaveでは、matplotlib 2.1.2で動作します。ただし、他のユーザーからは機能しないことが報告されているため、他の設定の影響を受ける可能性があります

0
blue_note

MacOSX 10.11.6上のmatplotlib 1.5.1以降、iPython(5.0.0、Python:3.5.2)シェルを起動して se%matplotlib を使用すると、matplotlibプロットを前面に表示できます:

>>> %matplotlib
Using matplotlib backend: MacOSX
>>> import matplotlib.pyplot as plt
>>> plt.plot([1,3,2,4])
>>> plt.show()

**編集:グローバルネームスペースを汚染するため、アドバイスは %pylabを使用しない のようです**

..シェルおよび%pylab以下を使用して、matplotlibプロットを前面に表示できます。

>>> %pylab
Using matplotlib backend: MacOSX
Populating the interactive namespace from numpy and matplotlib
>>> plot([1,3,2,4])
>>> show()
0
AJP