为什么保存按钮不能在matplotlib图上工作?

时间:2010-09-11 22:31:07

标签: python matplotlib virtualenv

我在Mac OS X 10.6上的Python 2.7 virtualenv中安装了matplotlib 1.0.0。我可以创造好情节。但是,每当我按保存按钮时,我都无法在保存对话框窗口中键入文本,也无法保存图表。我唯一能做的就是点击取消。有关导致此问题以及如何解决问题的任何想法?

alt text

Matplotlib安装程序

我通过克隆astraw's matplotlib github repository然后松散地关注HyperJeff's Installation Instructions for numpy/scipy/matplotlib来安装matplotlib。以下是setup.cfgmake.osx的可能相关部分,包括我在编译和安装之前修改过的部分。

setup.cfg

[egg_info]
tag_svn_revision = 1

[directories]
basedirlist = /Users/matthew/.virtualenvs/matplotlib-test

[status]
#suppress = True
#verbose = True

[provide_packages]

[gui_support]
#gtk = False
#gtkagg = False
#tkagg = False
wxagg = False
#macosx = False

[rc_options]
backend = MacOSX
#numerix = numpy

make.osx

# build mpl into a local install dir with
PREFIX=/Users/matthew/.virtualenvs/matplotlib-test
MPLVERSION=1.0rc1
PYVERSION=2.7
PYTHON=python${PYVERSION}
ZLIBVERSION=1.2.3
PNGVERSION=1.2.39
FREETYPEVERSION=2.3.11
MACOSX_DEPLOYMENT_TARGET=10.6
OSX_SDK_VER=10.6
ARCH_FLAGS="-arch i386-arch x86_64"

## You shouldn't need to configure past this point (but I did...)

PKG_CONFIG_PATH="${PREFIX}/lib/pkgconfig"
CFLAGS="${ARCH_FLAGS} -I${PREFIX}/include -I${PREFIX}/include/freetype2 -isysroot /Developer/SDKs/MacOSX${OSX_SDK_VER}.sdk"
LDFLAGS="${ARCH_FLAGS} -L${PREFIX}/lib -syslibroot,/Developer/SDKs/MacOSX${OSX_SDK_VER}.sdk"

PKG_CONFIG_PATH="${PREFIX}/lib/pkgconfig"
CFLAGS="-arch i386 -arch x86_64 -I${PREFIX}/include -I${PREFIX}/include/freetype2 -isysroot /Developer/SDKs/MacOSX${OSX_SDK_VER}.sdk"
LDFLAGS="-arch i386 -arch x86_64 -L${PREFIX}/lib -syslibroot,/Developer/SDKs/MacOSX${OSX_SDK_VER}.sdk"
FFLAGS="-arch i386 -arch x86_64"

修改setup.cfgmake.osx后,我发出以下命令来安装matplotlib:

make -f make.osx fetch deps mpl_build mpl_install
python setup.py install

注意: sudo不是必需的,因为我正在安装到virtualenv而不是像HyperJeff那样安装到网站包中。

Python安装

我使用python.org的 Python 2.7 PPC / i386 / x86-64 Mac OS X安装程序磁盘映像for Mac OS X 10.5 安装了Python 2.7。感谢Ned Deily's answer to this SO question,我知道此版本的Python 2.7无法在Mac OS X 10.6上运行IDLE或Tkinter。

问题

  1. 我安装的Python 2.7版本是否可能导致问题?我应该使用适用于Mac OS X 10.3到10.6的 Python 2.7 32位Mac OS X安装程序磁盘映像重新安装Python 2.7吗?
  2. 我需要在gui_support中配置一个不同的setup.cfg选项,然后重新编译matplotlib吗?
  3. 更新,2010年9月13日,下午3:33

    似乎其他Mac OS X和matplotlib用户遇到了同样的问题。在matplotlib-users邮件列表中,two users reported having the same problem on Mac OS X 10.5。虽然,他们运行matplotlib 0.99.1.1和0.99.1.2而不是我安装的matplotlib 1.0.0。

    2010年9月14日上午8:18更新

    matplotlib bug 2973874于2010年3月20日以同样的问题开放。但是,它是优先级5,并且自最初打开bug以来未被修改。以下是错误的描述:

      

    我正在运行6.0.1 enthought python distibution 64bit Mac。如果运行一个绘图并单击“保存”,我将打开一个保存对话框窗口,我可以在文件名字段中输入文本。我可以选择现有文件,但仍然无法修改名称。如果我选择一个非png文件,它不会覆盖它。我得到一个同名但带有png扩展名的文件。

4 个答案:

答案 0 :(得分:7)

您需要说服OSX,virtualenv实际上是从Application Bundle运行的。修复此处讨论:

http://groups.google.com/group/python-virtualenv/browse_thread/thread/83fa4a12d22a30c8/744e19c194f1618a

并在此实施:

https://github.com/gldnspud/virtualenv-pythonw-osx

答案 1 :(得分:1)

我的回答并不能解决问题,但可以轻松解决问题!您可以在终端中使用正确的文件扩展名触摸新文件。您可以在matplotlib窗口中使用鼠标选择此文件并覆盖它。

答案 2 :(得分:1)

解决这个问题:

使用conda install python.app安装pythonw

然后在终端中使用pythonw代替python

E.g。

pythonw my_plot.py

希望这有帮助

答案 3 :(得分:0)

对于那些Thouis方法不起作用的人:

我注意到一个简单的解决方法是更改​​matplotlib后端。以下是可用后端列表:

http://matplotlib.org/faq/usage_faq.html#what-is-a-backend

请注意,您应该选择其中一个渲染器(即支持show()命令的渲染器)。您可能需要安装后端,但可能安装了多个后端。

这样做:

import matplotlib
matplotlib.use('Qt4Agg')    #replace 'Qt4Agg' with desired backend

警告:这应该在导入pylab等之前完成。