如何在 Spyder 中的所有其他窗口之上显示 matplotlib 图形窗口
-
21-12-2019 - |
题
我正在使用 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)
很简单,对吧?第一个棘手的部分是您必须在导入 pyplot 之前设置后端。根据我的经验,事后更改后端没有任何作用。第二个棘手的部分是 Spyder 的科学启动脚本 import matplotlib.pyplot as plt
当您启动 Spyder IDE 时,因此您没有机会在导入 pyplot 之前设置后端。解决这个问题的方法是进入 Preferences->Console->External Modules,将 GUI Backend 设置为 TkAgg,然后重新启动 Spyder。那么上面的代码就可以正常工作了。
以前我通过设置后端 matplotlib.rcParams['backend'] = 'TkAgg'
启动 Spyder 后。然而,当我做其他事情时,我开始收到提到的错误 MacOSX
后端。这对我来说没有任何意义,因为我认为我正在使用 TkAgg
. 。最令人抓狂的部分是当我询问时 matplotlib.get_backend
它回来了 TkAgg
!显然,在导入 pyplot 后设置后端就像更改了后端一样,但实际上并没有更改后端。阿格!!