IPython shell和%matplotlib:退出终端应用程序后,显示图形的qt窗口消失。这个问题能解决吗?

IPython shell和%matplotlib:退出终端应用程序后,显示图形的qt窗口消失。这个问题能解决吗?,qt,python-3.x,matplotlib,ipython,Qt,Python 3.x,Matplotlib,Ipython,在我的设置中,figure从IPython shell中使用%matplotlib魔术创建的弹出窗口(不完全确定其工作原理)在从终端应用程序切换到任何其他正在运行的应用程序后消失,然后再次返回。因此,例如,如果我正在绘制一个图形,并且想要在Chrome中检查StackOverflow post,在返回到终端应用程序后,我必须重新声明命令plt.show(),以重新打开弹出窗口 这种行为听起来是否不典型(我的设置可能有问题),或者如果是典型的,是否有一些可能的解决方法?这可能是我的安装/OS所独有

在我的设置中,figure从IPython shell中使用
%matplotlib
魔术创建的弹出窗口(不完全确定其工作原理)在从终端应用程序切换到任何其他正在运行的应用程序后消失,然后再次返回。因此,例如,如果我正在绘制一个图形,并且想要在Chrome中检查StackOverflow post,在返回到终端应用程序后,我必须重新声明命令
plt.show()
,以重新打开弹出窗口

这种行为听起来是否不典型(我的设置可能有问题),或者如果是典型的,是否有一些可能的解决方法?这可能是我的安装/OS所独有的吗

我在MacOS Sierra上运行最新(刚刚更新的)版本的Anaconda和IPython。使用iTerm2和终端都存在此问题;似乎与终端应用程序无关


注意:我的目标是在终端中复制使用
matlab-nodesktop
生成绘图的行为,这将从matlab应用程序创建持久图形窗口。
编辑:我决定有条不紊地使用ipython和jupyter qtconsole选项的不同组合,以下是令人抓狂且令人着迷的不一致结果,使用命令行参数、加载IPython后的魔法命令,或两者的某种组合(简而言之,应该使用
IPython--matplotlib=qt5
):

对于iPython终端

指定
--gui

  • --gui=qt
    %matplotlib qt
    :尝试声明图形后,获取“缺少1个必需的位置参数:'figure'”(嗯…什么?)
  • --gui=qt--matplotlib=qt
    :获取“没有名为PyQt4的模块”
  • --gui=qt
    %matplotlib qt5
    成功;与osx不同的窗口格式,保存对话框提供文件类型选择
  • --gui=qt--matplotlib=qt5
    成功;同上
  • --gui=qt
    %matplotlib osx
    成功;窗口作为单独的窗口弹出 应用
  • --gui=qt--matplotlib=osx
    :QApplication窗口永远不会启动;无花果 显示为弹出窗口/终端应用程序的一部分,没有 它自己的“窗口”
而不指定GUI

  • --matplotlib=qt5
    %matplotlib qt5
    成功

  • --matplotlib=qt
    %matplotlib qt
    :获取“没有名为PyQt4的模块”

  • --matplotlib=osx
    %matplotlib osx
    :Q应用程序窗口从不启动;数字显示为临时弹出窗口

用于Jupyter QTConsole(即
Jupyter QTConsole…

指定
--gui

  • --gui=qt
    %matplotlib qt5
    :获取“运行时错误:无法激活多个gui事件循环”

  • --gui=qt--matplotlib=qt5
    工作,并为图形创建QApplication窗口(说真的……什么?那为什么
    %matplotlib qt5
    不工作?)

  • --gui=qt--matplotlib=inline
    %matplotlib inline
    :尝试使用
    plt.show()
    后,获取“matplotlib当前正在使用非gui后端”

  • --gui=qt
    %matplotlib osx
    :获取“运行时错误:无法激活多个gui事件循环”

  • --gui=qt--matplotlib=osx
    :工作正常,但没有QApplication窗口;同样,只是一个没有窗口的弹出窗口

而不指定GUI

  • --matplotlib=qt5
    %matplotlib qt5
    :与我们指定GUI时相同:工作

  • --matplotlib=osx
    %matplotlib-osx
    :与指定GUI时相同:工作,但没有QApplication窗口

  • --matplotlib=inline
    %matplotlib inline
    :尝试使用
    plt.show()
    后,获取“matplotlib当前正在使用非GUI后端”

  • --matplotlib=qt
    :获取“Eventloop或matplotlib集成失败。是否安装了matplotlib?”

  • %matplotlib qt
    :获取“没有名为PyQt4的模块”


原始答案

只用

%gui qt 
magic,后跟任何基于GUI的
%matplotlib
;在Mac上,我使用了
%matplotlib osx
。gui魔术将创建一个持久的Qt窗口作为自己的QApplication,而不是临时弹出窗口