【发布时间】:2013-05-24 14:26:12
【问题描述】:
我将 Python 嵌入到 PyQt4 应用程序中,当时它处于 beta 阶段,并且只在 Ipython 的 git 分支上工作。我已经有一年左右没有看代码了,从那以后发生了很多变化——在 Ipython 中似乎有很多重构。我目前安装了 13.2
所以,我需要嵌入 Python,并且我需要它存在于我的 PyQt4 应用程序中,以便我可以使用来自我的 Python 应用程序的数据更改内核的 user_ns。用于从 git 处理 python 版本的代码如下:
import sys
sys.path.insert(0, "../../ipython") #pickup ipython from git in a nonstd dir
from IPython.embedded.ipkernel import EmbeddedKernel
from IPython.frontend.qt.console.rich_ipython_widget import RichIPythonWidget
from IPython.frontend.qt.embedded_kernelmanager import QtEmbeddedKernelManager
from IPython.lib import guisupport
from PyQt4.QtGui import QFrame,QHBoxLayout
from PyQt4.QtGui import QApplication
from collections import namedtuple
class IpythonEmbeddedWidget(QFrame):
def __init__(self):
QFrame.__init__(self)
self._layout = QHBoxLayout()
self._kernel = EmbeddedKernel()
self._kernel_manager = QtEmbeddedKernelManager(kernel = self._kernel)
self._kernel_manager.start_channels()
self._kernel.frontends.append(self._kernel_manager)
self._shell_widget = RichIPythonWidget()
app = guisupport.get_app_qt4()
self._shell_widget.exit_requested.connect(app.quit)
self._shell_widget.kernel_manager = self._kernel_manager
self._layout.addWidget(self._shell_widget)
self.setLayout(self._layout)
self._kernel.shell.run_cell("import nltk")
self._kernel.shell.run_cell("import sys")
self._kernel.shell.run_cell("sys.path.append('../ipython_scripts')")
self._kernel.shell.run_cell("cd ../ipython_scripts")
def set_shell_focus(self):
pass
if __name__ == '__main__':
app = QApplication(sys.argv)
iew = IpythonEmbeddedWidget()
iew.show()
app.exec_()
sys.exit()
那么,我需要进行哪些更改才能使其与当前 (13.2) 版本的 Ipython 一起工作?
编辑:
13.2 没有进程内内核功能。您仍然需要开发分支。驱使我问这个问题的不是我更新了我的开发分支,而是更新我机器上的 QT/PyQt4 使现有代码中断。我随后更新了 Ipython 开发版本,该版本要求我在 API 发生变化时重构我的代码。
【问题讨论】: