我正在使用 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 后设置后端就像更改了后端一样,但实际上并没有更改后端。阿格!!

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top