2014-02-26 67 views
5

考虑以下简单的Python代码:Matplotlib退出错误

import matplotlib.pyplot as mplot 
mplot.plot([1,2,3,4],[1,2,3,4]) 

这个脚本没有问题的脚本运行时,但是如果我关闭了Python控制台(通过点击红色的X),我得到以下错误:

Fatal Python error: PyEval_RrestoreThread: NULL tstate 

如果我使用ctrl + Z退出python控制台,则不会发生此问题。 在我看来,如果我存在第一种方式,有一些悬挂过程没有正确终止。我已经尝试添加

mplot.close('all') 

到脚本的末尾,但我得到以下结果错误:

can't invoke "event" command: application has been destroyed while executing 
"event generate $w <<ThemeChanged>>" 
(procedure "ttk::ThemeChanged" line 6) 
invoke from within 
"ttk::ThemeChanged" 

我正在运行的Python 3.3的x86。 任何人都可以帮我理解这个问题吗?

谢谢!

+0

什么版本的mpl和什么操作系统? – tacaswell

+0

mpl-1.2.0.win32-py3.3和Windows 7 – Sergiy

回答

5

问题是标准的Python解释器没有建立如何处理图形用户界面的知识。没有深入细节,它看起来像matplotlib试图关闭一个不存在的线程。

http://matplotlib.org/users/shell.html处有原因的解释以及有关变通方法讨论的指针。

最简单的答案是使用IPython,它是matplotlib意识到作为参考解释。如果这不是一个选项,你可能需要深入挖掘。

+0

非常感谢!这是一个很好的资源。 – Sergiy

+1

谢谢holdenweb。我有一个类似的问题:在从命令行scirpt使用Tkinter GUI时调用plt.close()时,我会得到'不能调用'事件'命令'。我从[这里]下载了[matplotlibrc文件](https://matplotlib.org/_static/matplotlibrc)(https://matplotlib.org/tutorials/introductory/customizing.html#sphx-glr-tutorials-introductory-customizing -py),放在我的脚本文件夹中并更改'interactive:True'错误消失了! – Alex

3

简短回答:请确保您致电plt.close('all')


今天我有同样的问题。在边缘情况下,代码会决定不生成图形并提前退出函数,而不调用plt.close('all')(其中plt来自import matplotlib.pyplot as plt),这可能会出现。

我通过在边缘情况下添加plt.close('all')来快速解决问题。

+1

没有为我工作 –