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

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'.

Str*_*tch 9

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

当我使用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!

  • (*Spyder dev here*)我很高兴您自己想出如何解决问题.我有一些关于`matplotlib`后端的话:在Mac上我们决定将它设置为'MacOSX`而不考虑用户偏好,因为它是最可靠的,但考虑到你的困惑,我认为我们需要重新审视这个决定.我将为即将发布的2.3版本做:) (2认同)