webentwicklung-frage-antwort-db.com.de

matplotlib-Plotting-Fenster als aktives Fenster anzeigen lassen

Ich arbeite mit Python und Matplotlib auf Mac os x . Wenn ich an vielen verschiedenen Fenstern arbeite und ein Skript ausführen muss, das einen Plot erzeugt, wird das Plotfenster immer hinter dem aktiven Fenster geöffnet und ist sehr frustrierend Müssen Sie zwischen Fenstern wechseln, um das Bild anzusehen ... Ist es ein Grund, die Position des Plotfensters zu bestimmen und/oder es als Vordergrundfenster zu öffnen?

vielen Dank

33
Luca Fiaschi

Mich hat genau das gleiche Problem gestört. Ich habe endlich eine Lösung gefunden (im Pylab-Modus mit qt4agg-Backend):

get_current_fig_manager().window.raise_()

oder

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

Grüße, Markus

13
mrossi

Für mich (OSX 10.10.2, Matplotlib 1.4.3) ändert sich das Matplotlib-Backend in TkAgg. Bevor Sie pyplot oder irgendetwas importieren, gehen Sie zu:

import matplotlib
matplotlib.use('TkAgg')  

Plot-Fenster werden jetzt eingeblendet und können als Befehls-Tab bezeichnet werden.

14
Peter

Ich fand diese Lösung so oft nötig (z. B. bei der Verwendung der Spyder-IDE), dass ich sie in eine Funktion packte.

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

Ich habe eine gute Antwort in diesem Thread gefunden: Wie lässt man ein Tkinter-Fenster nach vorne springen?

Grundsätzlich sollen Fensterattribute verwendet werden. Setzen Sie das Attribut '-topmost' auf True (1), um das Fenster in den Vordergrund zu bringen, und legen Sie es auf False (0) fest, damit später andere Fenster angezeigt werden können davor. Hier ist der Code, der für mich funktioniert hat:

import matplotlib.pyplot as plt
wm = plt.get_current_fig_manager() 
wm.window.attributes('-topmost', 1)
wm.window.attributes('-topmost', 0)
2
antoniorohit

Für MacOS Sierra und Python 3.6 Matplotlib 2.0.0

get_current_fig_manager().show()

die obige Zeile macht den Job nichts anderes nötig.

1
H S Rathore

Das hat für mich funktioniert !!

(Getestet unter Mac OS X 10.11, Spyder 2.3.5.2 - Python 3.4)

Gehen Sie zu Preferences> IPython Console> Graphics und setzen Sie ein Backend auf Qt (danach müssen Sie den Kernel neu starten). 

Erstellen Sie eine Datei, die Folgendes enthält:

def raise_window(figname=None):
    if figname: plt.figure(figname)
    cfm = plt.get_current_fig_manager()
    cfm.window.activateWindow()
    cfm.window.raise_()

und importieren Sie es beim Start (Voreinstellungen> IPython-Konsole> Start> Datei ausführen). Rufen Sie einfach die Funktion raise_window() unter Ihrem Code auf.

Beispiel:

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

Für mich funktionieren nur die folgenden (mit TkAgg Backend):

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

Sie können einstellen 

backend      : MacOSX

in Ihrer matplotlibrc-Datei für eine dauerhafte Lösung.

Es funktioniert für mich auf Macos Mojave, mit Matplotlib 2.1.2. Andere Benutzer haben sich jedoch darüber beschwert, dass es für sie nicht funktioniert, sodass andere Einstellungen sie möglicherweise beeinflussen

0
blue_note

Ab matplotlib 1.5.1 unter MacOSX 10.11.6 können Sie beim Starten einer iPython (5.0.0, Python: 3.5.2) Shell und use% matplotlib einen Matplotlib-Plot nach vorne bringen.

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

** Edit: Hinweis scheint zu sein % pylab nicht zu verwenden da der globale Namensraum verschmutzt wird **

.. Shell und Verwendung von %pylab können Sie einen Matplotlib-Plot nach vorne bringen, indem Sie:

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