Str*_*tch 3 python matplotlib spyder
我正在使用Spyder IDE,我发现matplotlib图形窗口总是显示在其他窗口后面.例如,在启动Spyder之后,如果我输入plt.plot([0,1],[0,1])
控制台,我会在主Spyder窗口后面得到一个图.如何在所有其他窗口的顶部显示新的图形窗口?
我找到了这个解决方案(让matplotlib绘图窗口弹出作为活动窗口),但它在Spyder中对我不起作用.我遇到了麻烦fig.canvas.manager.window
.它说AttributeError: 'FigureManagerMac' object has no attribute 'window'
.
好吧,当我在处理其他事情时,我碰巧遇到了解决方案.
当我使用MacOSX
后端时,然后fig.canvas.manager.window
给出AttributeError: 'FigureManagerMac' object has no attribute 'window'
.但是,当我使用TkAgg
后端时,则fig.canvas.manager
具有该属性window
.因此,我可以实现如下建议:
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)
Run Code Online (Sandbox Code Playgroud)
很简单吧?第一个棘手的部分是你必须在导入pyplot之前设置后端.之后改变后端在我的经验中没有任何意义.第二个棘手的部分是Spyder的Scientific Startup脚本import matplotlib.pyplot as plt
在启动Spyder IDE时正确,所以在导入pyplot之前你没有机会设置后端.解决这个问题的方法是首选项 - >控制台 - >外部模块,将GUI后端设置为TkAgg,然后重新启动Spyder.然后上面的代码正常工作.
之前我matplotlib.rcParams['backend'] = 'TkAgg'
在启动Spyder之后立即设置了后端.然而,当我做其他事情时,我开始收到提到MacOSX
后端的错误.这对我没有任何意义,因为我以为我在使用TkAgg
.令人抓狂的部分是当我查询matplotlib.get_backend
它返回时TkAgg
!显然,在导入pyplot后设置后端就好像你已经改变了后端一样,但实际上并没有改变后端.ARGG!