如何在Spyder中的所有其他窗口的顶部显示matplotlib图形窗口

时间:2013-11-16 23:07:50

标签: python matplotlib spyder

我正在使用Spyder IDE,我发现matplotlib图形窗口总是显示在其他窗口后面。例如,在启动Spyder之后,如果我在控制台中键入plt.plot([0,1],[0,1]),我会在主Spyder窗口后面得到一个图。如何在所有其他窗口的顶部显示新的图形窗口?

我找到了这个解决方案(make matplotlib plotting window pop up as the active one),但它在Spyder中对我不起作用。我与fig.canvas.manager.window遇到了麻烦。它说AttributeError: 'FigureManagerMac' object has no attribute 'window'

1 个答案:

答案 0 :(得分:8)

好吧,当我在处理其他事情时,我碰巧遇到了解决方案。

当我使用MacOSX后端时,fig.canvas.manager.window会提供AttributeError: 'FigureManagerMac' object has no attribute 'window'。但是,当我使用TkAgg后端时,fig.canvas.manager具有属性window。因此,我可以按如下方式实施this suggestion

import matplotlib
matplotlib.use('TkAgg')
import matplotlib.pyplot as plt
fig = plt.figure()
plt.plot([0,1],[0,1])
#Put figure window on top of all other windows
fig.canvas.manager.window.attributes('-topmost', 1)
#After placing figure window on top, allow other windows to be on top of it later
fig.canvas.manager.window.attributes('-topmost', 0)

够简单吧?第一个棘手的部分是你必须在导入pyplot之前设置后端。之后改变后端在我的经验中没有任何意义。第二个棘手的部分是Spyder的Scientific Startup脚本在启动Spyder IDE时正确[{1}},所以在导入pyplot之前你没有机会设置后端。解决这个问题的方法是首选项 - >控制台 - >外部模块,将GUI后端设置为TkAgg,然后重新启动Spyder。然后上面的代码正常工作。

之前我在启动Spyder后立即通过import matplotlib.pyplot as plt设置了后端。然而,当我做其他事情的时候,我开始收到提到matplotlib.rcParams['backend'] = 'TkAgg'后端的错误。这对我没有任何意义,因为我以为我在使用MacOSX。令人抓狂的部分是当我查询TkAgg时它返回matplotlib.get_backend!显然,在导入pyplot后设置后端就好像你已经改变了后端一样,但实际上并没有改变后端。 ARGG!