【问题标题】:How do I display a matplotlib figure window on top of all other windows in Spyder如何在 Spyder 的所有其他窗口之上显示 matplotlib 图形窗口
【发布时间】:2013-11-30 06:18:21
【问题描述】:

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

我找到了这个解决方案 (make matplotlib plotting window pop up as the active one),但它在 Spyder 中对我不起作用。我遇到了fig.canvas.manager.window 的麻烦。上面写着AttributeError: 'FigureManagerMac' object has no attribute 'window'

【问题讨论】:

  • 遇到了同样的问题。这是解决方案:stackoverflow.com/a/32934536/5406821
  • 看起来您需要将 SpyderPrefs 设置为使用 Qt4Agg 或其他一些用于 matplotlib 的非 MacOS 后端。这样做后对我有用。

标签: python matplotlib spyder


【解决方案1】:

嗯,当我在做其他事情时,我偶然发现了解决方案。

当我使用MacOSX 后端时,fig.canvas.manager.window 会给出AttributeError: 'FigureManagerMac' object has no attribute 'window'。但是,当我使用TkAgg 后端时,fig.canvas.manager 具有属性window。因此,我可以按如下方式实现this suggestion

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 时执行import matplotlib.pyplot as plt,因此在导入 pyplot 之前您没有机会设置后端。解决这个问题的方法是转到 Preferences->Console->External Modules,将 GUI Backend 设置为 TkAgg,然后重新启动 Spyder。那么上面的代码就可以正常工作了。

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

【讨论】:

  • (Spyder dev here) 很高兴您自己找到了解决问题的方法。我对matplotlib 后端有一些话:在Mac 上,我们决定将其设置为MacOSX,而不管用户偏好如何,因为它是最可靠的,但考虑到您的困惑,我认为我们需要重新考虑这个决定。我会在我们即将发布的 2.3 版本中这样做:)
猜你喜欢
  • 1970-01-01
  • 2017-10-17
  • 2010-12-27
  • 1970-01-01
  • 1970-01-01
  • 2021-07-15
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多