使matplotlib绘图窗口弹出为活动窗口

时间:2011-11-20 14:36:49

标签: python macos matplotlib

我在mac os x上使用python和matplotlib。 当我在许多不同的窗口上工作并且我必须运行产生绘图的脚本时,绘图窗口总是在活动窗口后面打开并且非常沮丧地必须在窗口之间切换以查看图像。 是为什么决定绘图窗口的位置,和/或将其弹出为前景窗口?

感谢

9 个答案:

答案 0 :(得分:14)

对我来说(OSX 10.10.2,Matplotlib 1.4.3),有效的方法是将matplotlib后端更改为TkAgg。在导入pyplot或其他任何内容之前,请转到:

import matplotlib
matplotlib.use('TkAgg')  

现在弹出绘图窗口,并且可以按命令选项卡。

答案 1 :(得分:13)

我被完全相同的问题所困扰。我终于找到了一个解决方案(在pylab模式下,使用qt4agg后端):

get_current_fig_manager().window.raise_()

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

此致 马库斯

答案 2 :(得分:4)

我发现这个解决方案经常需要(例如使用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 :(得分:3)

我在这个帖子上找到了一个很好的答案: How to make a Tkinter window jump to the front?

基本上,我们的想法是使用窗口属性 - 将'-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)

答案 4 :(得分:1)

这对我有用!!

(在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()

答案 5 :(得分:1)

对于MacOS Sierra和python 3.6,Matplotlib 2.0.0

get_current_fig_manager().show()

以上一行不需要任何其他工作。

答案 6 :(得分:0)

从MacOSX 10.11.6上的matplotlib 1.5.1开始,如果你启动一个iPython(5.0.0,Python:3.5.2)shell和use %matplotlib,你可以使用以下方法将matplotlib图带到前面: / p>

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

** 编辑:建议似乎是not to use %pylab因为它污染了全局名称空间 **

.. shell并使用%pylab你可以使用以下方法将matplotlib图带到前面:

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

答案 7 :(得分:0)

仅对我而言以下作品(使用TkAgg后端):

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

答案 8 :(得分:0)

您可以设置

backend      : MacOSX

在您的matplotlibrc文件中寻求永久解决方案。

  

它对我来说适用于使用matplotlib 2.1.2的macos mojave。但是,其他用户抱怨说它不适用于他们,因此它可能会受到其他设置的影响