带有 %matplotlib 的 IPython shell:离开终端应用程序后,显示图形的 qt 窗口消失。这可以解决吗?

Luk*_*vis 2 qt matplotlib ipython python-3.x

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

这种行为听起来是否不典型(我的设置可能有问题),或者如果它是典型的,是否有一些可能的解决方法?这对于我的安装/操作系统来说可能是独一无二的吗?

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

注意:我的目标是复制matlab -nodesktop在终端中生成绘图的行为,这会从 Matlab 应用程序创建持久的图形窗口。

Luk*_*vis 5

编辑:我决定有条不紊地检查 ipython 和 jupyter qtconsole 选项的不同组合,这里是令人疯狂且令人着迷的不一致结果,使用命令行参数、IPython 加载后的魔术命令或两者的某种组合(简而言之,一个应该使用ipython --matplotlib=qt5):

对于 iPython 终端

指定--gui

  • --gui=qt, %matplotlib qt: 尝试声明图后,得到“缺少 1 个必需的位置参数:'图'”(嗯...什么?)
  • --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:QApplication 窗口永远不会启动;数字显示为临时弹出窗口

对于 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 
Run Code Online (Sandbox Code Playgroud)

magic,其次是任何%matplotlib <backend>基于 GUI 的;在 Mac 上,我使用了%matplotlib osx. gui 魔法创建一个持久的 Qt 窗口作为它自己的 QApplication,而不是临时的弹出窗口。