我正在使用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'
。
答案 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!