【发布时间】:2014-03-10 21:17:47
【问题描述】:
我有一个功能齐全的基于 PyQt4 的应用程序,我现在正尝试将一个 IPython 控制台嵌入其中以用作一种脚本环境。
我已经粗略地改编了IPython's Github page 中的示例以适应我的应用程序的模块系统。但是,如果 any PyQt 导入发生在 IPython 导入之前
from IPython.qt.console.rich_ipython_widget import RichIPythonWidget
from IPython.qt.inprocess import QtInProcessKernelManager
我收到以下错误:
ImportError:
Could not load requested Qt binding. Please ensure that
PyQt4 >= 4.7 or PySide >= 1.0.3 is available,
and only one is imported per session.
Currently-imported Qt library: 'pyqtv1'
PyQt4 installed: True
PySide >= 1.0.3 installed: False
Tried to load: ['pyside', 'pyqt']
我已将此错误追溯到 IPython's qt 模块,但本质上是强制加载“pyqtv1”(通过将 api_opts = [QT_API] 替换为 api_opts = ['pyqtv1'] 会在 IPython 窗口内中断 QString。
但是,如果我这样做是为了让这些导入首先发生(通过导入此代码所在的模块,然后再导入其他任何内容),该错误就会消失,并且它基本上会用ImportError: cannot import name QString 完全破坏QString。
我已经验证,如果我在包含 IPython 实例的模块中创建一个自包含的 QApplication,确保在执行 IPython 导入后导入 PyQt.QtGui,它会按预期工作。只有当我尝试将 IPython 代码与任何其他 PyQt 代码混合时才会出现问题。
关于如何修复错误的任何建议?
我使用的是 Ubuntu Linux 12.04,而 IPython 是 3 月 10 日发布的 2.0.0-dev 版本。
【问题讨论】:
-
您是否尝试过使用已发布的 IPython 版本之一,例如 1.2 系列? 2.0系列发生了很多变化,这可能是他们最后的一个错误。
-
是的,1.2 系列没有内置的“本地”功能。这就是我在开发版本上的原因。否则我会使用代码here,这实际上是 2.0 系列中的东西最初是如何产生的:p
标签: python qt python-2.7 pyqt4 ipython