在Mac OS X上使用键盘关闭pyplot图形

16

有没有办法在OS X上使用键盘关闭pyplot图形(据我所见,您只能通过单击窗口关闭按钮来关闭它)?

我尝试了许多键组合,如command-Q,command-W等,但似乎在我的系统上都不起作用。

我还尝试了这个代码发布 这里

#!/usr/bin/env python

import matplotlib.pyplot as plt

plt.plot(range(10))

def quit_figure(event):
    if event.key == 'q':
        plt.close(event.canvas.figure)

cid = plt.gcf().canvas.mpl_connect('key_press_event', quit_figure)

plt.show()

然而,以上方法在OS X上也不起作用。我尝试向quit_figure添加打印语句,但似乎从未被调用。我正在最新的公共OS X上尝试此操作,使用matplotlib版本1.1.1和随OS X附带的标准Python(2.7.3)。有什么解决方法吗?每次都要去用鼠标非常烦人。
4个回答

16

这绝对是pyplot使用的默认OS X后端中的一个bug。如果对其他人有所帮助,将以下两行添加到文件顶部可切换到另一种有效的后端。

import matplotlib
matplotlib.use('TKAgg')

13

我通过替换来解决了这个问题。

plt.show()

随着

plt.show(block=False)
input("Hit Enter To Close")
plt.close()

虽然这只是一个hack,但我希望它能对某些人有所帮助。


0

使用交互模式

import matplotlib.pyplot as plt
# Enable interactive mode:
plt.ion()

# Make your plot: No need to call plt.show() in interactive mode
plt.plot(range(10))

# Close the active plot:
plt.close()
# Plots can also be closed via plt.close('all') to close all open plots or
# plt.close(figure_name) for named figures.

请查看文档中的“什么是交互模式?”部分。

可以使用plt.ioff()在任何时候关闭交互模式。


-2

当你在matplotlib窗口中拥有焦点时,官方的键盘快捷键是ctrl-W,如下所示:

http://matplotlib.org/1.2.1/users/navigation_toolbar.html

由于这是一种非常不Mac的做法,实际上是cmd-W。很难猜到,不是吗?

如果您正在使用交互式shell,也可以通过编程方式关闭窗口。请参见:

何时使用cla()、clf()或close()来清除matplotlib中的绘图?

因此,如果您使用pylab或等效物(所有内容都在同一个命名空间中),只需close(fig)即可。如果您手动加载库,则需要从正确的命名空间中获取close,例如:

import matplotlib.pyplot as plt

fig = plt.figure()
plt.plot([0,1,2],[0,1,0],'r')
fig.show()
plt.close(fig)

唯一的问题在于,虽然人们期望有fig.close这样的东西,但实际上并不存在。另一方面,您可以使用plt.close('all')来恢复您的桌面。


正如我在问题中提到的,我已经尝试过那些方法了...但是对我都没有用(无论是cmd-W还是ctrl-W)。 - houbysoft
@edit: 是的,我知道那些,但它们不能帮助缓解烦恼。基本上我想让它弹出一个图表,我会盯着它一段时间,然后我需要一个按键组合来关闭它,而不必使用鼠标。如果我没有一种监听键事件的方法(如问题中所述,我尝试添加事件处理程序),我就无法使用close(fig)。 - houbysoft
我怀疑你的问题是焦点不在绘图窗口上。如果你移动了焦点,按键快捷方式是否有效?如果是这样,那么尝试使用 cmd-Tab + cmd-W… - DrV
焦点肯定在窗口上;例如,如果我按Tab键,它会在底部的窗口按钮之间循环。 - houbysoft
对我来说,这似乎是一个错误,因为我发布的代码片段应该可以工作,但它并没有。 - houbysoft
我同意,因为在我的Mac上(使用macports python的IPython shell),所有这些技巧似乎都适用。标准的OS X Python似乎会带来更多问题,至少在科学使用中是这样。 - DrV

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接