Python 如何在Spyder中的所有其他窗口之上显示matplotlib图形窗口

Python 如何在Spyder中的所有其他窗口之上显示matplotlib图形窗口,python,matplotlib,spyder,Python,Matplotlib,Spyder,我正在使用Spyder IDE,我发现matplotlib图形窗口总是显示在其他窗口后面。例如,在启动Spyder之后,如果我在控制台中键入plt.plot([0,1],[0,1]),我会在Spyder主窗口后面得到一个绘图。如何使新图形窗口显示在所有其他窗口的顶部 我找到了这个解决方案(),但它在Spyder中对我不起作用。我在使用图canvas.manager.window时遇到了麻烦。它说AttributeError:'FigureManagerMac'对象没有属性“窗口”好吧,我在处理其

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


我找到了这个解决方案(),但它在Spyder中对我不起作用。我在使用图canvas.manager.window时遇到了麻烦。它说
AttributeError:'FigureManagerMac'对象没有属性“窗口”

好吧,我在处理其他东西时偶然发现了这个解决方案

当我使用
MacOSX
后端时,然后
fig.canvas.manager.window
给出
AttributeError:'FigureManagerMac'对象没有属性“window”
。但是,当我使用
TkAgg
后端时,
fig.canvas.manager
具有属性
窗口
。因此,我可以执行以下操作:

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时将matplotlib.pyplot导入为plt,因此在导入pyplot之前没有机会设置后端。解决方法是转到首选项->控制台->外部模块,将GUI后端设置为TkAgg,然后重新启动Spyder。那么上面的代码就可以正常工作了


之前我是在启动Spyder之后通过
matplotlib.rcParams['backend']='TkAgg'
设置后端的。然而,当我在做其他事情时,我开始出现提到
MacOSX
后端的错误。这对我来说没有任何意义,因为我认为我使用的是
TkAgg
。令人恼火的部分是当我查询
matplotlib.get_backend
时,它返回了
TkAgg
!显然,在导入pyplot后设置后端的行为就像您已经更改了后端一样,但实际上并没有更改后端。啊

(这里是Spyder dev)我很高兴你自己找到了解决问题的方法。关于
matplotlib
backends,我有几句话要说:在Mac上,我们决定将其设置为
MacOSX
,而不考虑用户偏好,因为它是最可靠的,但考虑到您的困惑,我想我们需要重新考虑这个决定。我会为即将发布的2.3版本做这件事:)也有同样的问题。解决方案如下:看起来您需要将SpyderPref设置为使用Qt4Agg或matplotlib的其他非MacOS后端。做了这件事后,我的工作。