为什么matplotlib图中的保存按钮不起作用?
我在Mac OS X 10.6上安装了matplotlib 1.0.0,并在Python 2.7的虚拟环境中使用。创建图表没有问题。但是,每当我按下保存按钮时,我无法在保存对话框中输入文本,也无法保存图表。唯一能做的就是点击取消。有人知道这是什么原因吗?怎么解决?
Matplotlib安装过程
我通过克隆astraw的matplotlib GitHub库来安装matplotlib,然后大致按照HyperJeff的numpy/scipy/matplotlib安装说明进行操作。下面是我在编译和安装之前修改的setup.cfg
和make.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.cfg
和make.osx
后,我执行了以下命令来安装matplotlib:
make -f make.osx fetch deps mpl_build mpl_install
python setup.py install
注意:因为我是在虚拟环境中安装,所以不需要使用sudo
,而不是像HyperJeff那样安装到site-packages中。
Python安装
我使用python.org的Python 2.7 PPC/i386/x86-64 Mac OS X Installer Disk Image for Mac OS X 10.5安装了Python 2.7。根据Ned Deily在这个SO问题上的回答,我知道这个版本的Python 2.7无法在Mac OS X 10.6上运行IDLE或Tkinter。
问题
- 我安装的这个Python 2.7版本会是问题的原因吗?我应该使用Python 2.7 32-bit Mac OS X Installer Disk Image for Mac OS X 10.3 through 10.6重新安装Python 2.7吗?
- 我需要在
setup.cfg
中配置其他的gui_support
选项,然后重新编译matplotlib吗?
更新,2010年9月13日,下午3:33
似乎其他Mac OS X和matplotlib用户也遇到了同样的问题。在matplotlib用户邮件列表中,有两个用户在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被提出后就没有被修改过。以下是这个bug的描述:
我在64位Mac上运行6.0.1的Enthought Python发行版。如果我运行一个图表并点击保存,会弹出一个保存对话框,但我无法在文件名字段中输入文本。我可以选择一个已有的文件,但仍然无法修改名称。如果我选择一个非png文件,它不会被覆盖。我得到的是一个同名但扩展名为png的文件。
4 个回答
要解决这个问题:
可以用 conda install python.app
来安装 pythonw
。
然后在你的终端里用 pythonw
替代 python
。
比如:
pythonw my_plot.py
希望这能帮到你
我的回答虽然不能直接解决问题,但可以轻松绕过它!你可以在终端里创建一个新的文件,确保这个文件的扩展名是正确的。然后你可以在matplotlib窗口里用鼠标选择这个文件,并把它覆盖掉。
你需要让OSX(苹果电脑的操作系统)相信这个虚拟环境其实是从一个应用程序包里运行的。这里讨论了如何解决这个问题:
具体的实现可以在这里找到: