【问题标题】:Why doesn't the save button work on a matplotlib plot?为什么保存按钮在 matplotlib 图上不起作用?
【发布时间】:2011-04-11 05:05:41
【问题描述】:

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

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 Installer Disk Image 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. 是否需要在setup.cfg 中配置不同的gui_support 选项,然后重新编译matplotlib?

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 distibition 64bit Mac。如果运行绘图并单击保存,我会打开一个保存对话框窗口,我无法在文件名字段中输入文本。我可以选择现有文件,但仍然无法修改名称。如果我选择一个非 png 文件,它不会覆盖它。我得到一个同名但扩展名为 png 的文件。

【问题讨论】:

  • 作为参考,我的股票 2.6 Python (for 10.6) 和 matplotlib 1.0 没有这个问题。那里没有帮助,很遗憾。
  • @Andrew — 你是如何安装 matplotlib 的?另外,不要卖短你的评论——这是一个有效的数据点。 matplotlib 在现有的 Python 2.6 下工作的事实可能表明 Python 2.7 框架的 Tkinter 支持被破坏是罪魁祸首。
  • 我在 10.7 的 virtualenv 中运行 Python 2.7 时遇到了同样的问题。下面的答案为我解决了这个问题。
  • @AndrewDalke 是通过 virtualenv 还是使用系统 python 获得的?
  • 那是系统 Python。我也有Python 2.7,直接编译到/usr/local/,没问题。

标签: python matplotlib virtualenv


【解决方案1】:

您需要让 OSX 相信 virtualenv 实际上是从应用程序包中运行的。此处讨论的修复:

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

并在这里实现:

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

【讨论】:

  • 这个脚本@thouis 中的“env_path”是什么?
  • 我相信这是通往 virtualenv 的路径。
  • 嗯。我在~/virtualenvs 中没有看到任何“.Python”目录。
  • 奇数。你用的是什么版本的 virtualenv?我在 1.5.1。
  • 对我来说效果很好。 OS X Lion,python 2.7.2 作为框架从源代码构建,matplotlib 从源代码。
【解决方案2】:

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

【讨论】:

    【解决方案3】:

    解决这个问题:

    使用conda install python.app安装pythonw

    然后在您的终端中使用pythonw 而不是python

    例如

    pythonw my_plot.py
    

    希望对你有帮助

    【讨论】:

      【解决方案4】:

      对于那些 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 等之前完成。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2011-08-14
        • 1970-01-01
        • 1970-01-01
        • 2016-07-06
        • 1970-01-01
        • 1970-01-01
        • 2021-12-16
        相关资源
        最近更新 更多