pyplot.show()无法显示图形,导致IDLE重启

1 投票
2 回答
3278 浏览
提问于 2025-04-16 16:35

我刚在我的MacBook上安装了Python 2.7.1(运行的是Snow Leopard系统),还安装了一个叫做scipy superpack的东西。NumPy和matplotlib可以正常导入,但是当我在解释器或者脚本中调用pyplot.show()时,会出现一个空白窗口,只持续一秒钟,然后IDLE就重启了。根本没有图形显示出来。

我写了一个非常简单的测试脚本,下面的截图就是它的样子。这个脚本创建了两个列表,打印出来,然后把这两个列表进行绘图,并把图形输出为一个png文件。这个过程都很顺利,你可以看到png文件确实存在于正确的文件夹里。所以pyplot.savefig()是正常工作的。但是当我调用pyplot.show()时,你可以看到解释器又重启了。

我该怎么解决这个问题呢?

python输出的屏幕截图

更新

根据@Blender的建议,我在脚本中添加了plt.show(),然后从终端运行它。这次出现了以下错误信息:

Exception in Tkinter callback
Traceback (most recent call last):
  File "/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/lib-tk/Tkinter.py", line 1410, in __call__
    return self.func(*args)
  File "/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/matplotlib-1.1.0-py2.6-macosx-10.6-universal.egg/matplotlib/backends/backend_tkagg.py", line 235, in resize
    self.show()
  File "/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/matplotlib-1.1.0-py2.6-macosx-10.6-universal.egg/matplotlib/backends/backend_tkagg.py", line 239, in draw
    tkagg.blit(self._tkphoto, self.renderer._renderer, colormode=2)
  File "/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/matplotlib-1.1.0-py2.6-macosx-10.6-universal.egg/matplotlib/backends/tkagg.py", line 19, in blit
    tk.call("PyAggImagePhoto", photoimage, id(aggimage), colormode, id(bbox_array))
TclError

2 个回答

0

只需要使用以下代码:
import pylab
pylab.show()
这样就会在一个单独的窗口中显示图表。

1

这个问题可能是因为idle和matplotlib的后端之间发生了冲突。与其使用idle,不如试试ipython,它在superpack里有包含。你可以在命令行中用

ipython -pylab

来启动ipython,这样就可以进入pylab模式了。

撰写回答