pyplot:关闭show()窗口不继续代码

5

我已经成功使用pyplot来显示热力图,但今天突然无法工作了。

我的问题是,在设置了绘图参数之后,调用show()方法会在一个窗口中显示图形,但当我关闭该窗口(通过点击窗口右上角的x按钮)后,我的代码不会继续执行show()方法之后的部分。似乎它一直停顿在show()上。

matrix是一个numpy矩阵。

以下是我的示例代码:

plt.pcolor(matrix, cmap=plt.cm.binary)
plt.xlabel('xaxis', fontsize=20)
plt.ylabel('yaxis', fontsize=20)
plt.axis([0, matrix.shape[1], 0, matrix.shape[0]])
plt.colorbar()
#This is where my code hangs...
plt.show()
#Closing the window manually does nothing.
#And the close() method doesn't seem to do anything.
plt.close()

在调用show()方法并关闭窗口后,我的进程仍在运行,并且我必须手动终止它。有人知道这是为什么吗?

1
你是在使用ipython吗?你正在使用哪个操作系统?你在脚本中有任何更改或更新了可能导致问题的包吗?能否提供更多细节? - hitzg
4个回答

4

如果您正在使用tkinter:

在使用pyplot时(用于选择图形数据文件),我遇到了同样的问题。我发现,通过对我的tkinter.Tk()对象调用root.destroy,关闭由plt.show()创建的窗口,可以使我的代码继续执行而不是挂起。


1

你尝试过在plt.show()之前设置plt.ion()吗?这会启用交互模式,show不会停止脚本的执行。


当我在plt.show()之前添加plt.ion()时,窗口会短暂地出现(实际上足够看到图形),然后自动关闭。 - Kestrel
@Kestrel 好的,如果是这样,那么它会关闭,因为你调用了 plt.close() - hitzg
这个解决方案是一个权宜之计,但并不是对于“show”在关闭图形后仍然阻塞的原因的答案。 - hitzg
同意,只是觉得在这种情况下可能会有用。 - tmdavison
@hitzg 即使删除了 plt.close(),它仍然表现出相同的阻塞行为。 - Kestrel
@Kestrel 我指的是你的第一条评论。 - hitzg

0
因为plt.show()是一个"阻塞函数",在关闭图形之前,代码将不会继续执行。即使在plt.show()之后写了plt.close(),在关闭图形之前也不会执行plt.close()

0

最近看起来好像可以做到:

plt.show(block=False)

在图形界面关闭后,代码将不再被阻塞。


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