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

Luc*_*chi 34 python macos matplotlib

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

谢谢

Pet*_*ter 15

对我来说(OSX 10.10.2,Matplotlib 1.4.3),有效的是将matplotlib后端更改为TkAgg.在导入pyplot或任何东西之前,请转到:

import matplotlib
matplotlib.use('TkAgg')  
Run Code Online (Sandbox Code Playgroud)

现在可以弹出绘图窗口,并且可以使用Command-Tab'.


mro*_*ssi 13

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

get_current_fig_manager().window.raise_()
Run Code Online (Sandbox Code Playgroud)

要么

fig = gcf()
fig.canvas.manager.window.raise_()
Run Code Online (Sandbox Code Playgroud)

此致,马库斯

  • 图管理器不再具有窗口属性,我也无法在API或matplotlib源代码中找到带有macosx,tkagg和agg的raise_()引用. (4认同)

ray*_*abr 6

我发现这个解决方案经常需要(例如使用 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_()
Run Code Online (Sandbox Code Playgroud)

  • 我更新了函数以重新排序 if-else 并希望澄清我们必须专门针对 None 进行测试,因为 figure_id == 0 是允许的值。这应该与普遍使用 None 作为默认参数值并随后测试 None 以启动默认行为一致。 (2认同)