导入pyqt时,Matplotlib交互式窗口会挂起

时间:2015-02-25 09:00:25

标签: matplotlib

我使用matplotlib 1.4和OSX后端:

>>> matplotlib.get_backend()
u'MacOSX'

如果我绘制任何东西,窗口是活跃且健康的:我可以使用缩放按钮,保存等。我导入Qt的那一刻:

from PyQt4 import QtGui, QtCore

情节窗口冻结,如果我将鼠标悬停在它们上方,将产生旋转的沙滩球。我可以使用pl.draw()更新绘图窗口,但我无法与它们进行交互。特别是,当通过Dock或apple-tab激活时,Mac OS将不再将窗口置于前面。

这尤其是一个问题,因为我正在使用另一个导入PyQt4的模块,但我需要使用该模块,并提供交互式绘图。这个问题有解决方法吗?

1 个答案:

答案 0 :(得分:1)

使用--matplotlib参数启动IPython会加载并使用matplotlib中设置的默认后端初始化.matplotlibrc。有一个matplotlib限制,一旦加载后你就无法切换后端。这是use()的{​​{3}}:

  

首次导入pyplot之前必须先调用此函数;或者,如果您未使用pyplot,则必须在导入matplotlib.backends之前调用它。

有一个实验switch_backend(),但这适用于described in the documentation,不适用于Qt或MacOSX后端。

  

此功能实验性,并且只能切换到图像后端[...]如果您尝试以交互方式从一个GUI后端切换到另一个GUI后端,则会爆炸。

所有这一切的结果是,一旦你用--matplotlib启动了IPython,就不可能改变后端(不管你是否已经确认)。解决方案是以ipython --matplotlib=qt开头或更改.matplotlibrc文件中的默认后端。

在MacOSX上,matplotlib配置文件位于~/.matplotlibrc/matplotlibrc。打开该文件并更改以下行:

backend : MacOSX

为...

backend : Qt4Agg

保存文件,默认情况下,当您使用ipython --matplotlib时,IPython(和matplotlib)将启动Qt4后端。

image-only backends中提供了.matplotlibrc配置中的更多信息。