Nul*_*tie 7 python jupyter jupyter-notebook ipywidgets jupyter-lab
有没有办法为 Jupyter Lab 创建扩展,我可以通过笔记本中的 Python 单元进行操作?
在 Jupyter Notebook 中,这可以通过 IPywidget 来实现,它具有 Python 后端和 Javascript 前端。这两者可以交互,因此我可以通过 Python 向 javascript 前端发送指令,反之亦然。
据我了解,这在 Jupyter Lab 中不再可能,因为他们禁用了通过 IPython 执行 javascript 的功能。建议创建 jupyterlab 扩展。是否可以通过 Python 代码控制这样的扩展,如果可以的话如何控制?
在一个简单的示例中,我想要一个侧边栏(如 TOC 扩展),其中包含一个文本框,我可以通过 Python 设置其文本。
A.Python 到 JavaScript
看看https://opensourcelibs.com/lib/ipylab
“从 Python 笔记本控制 JupyterLab。”
from ipylab import JupyterFrontEnd
app = JupyterFrontEnd()
...
Run Code Online (Sandbox Code Playgroud)
在某些情况下,可能的解决方法可能是使用 javascript 扩展观察 python 单元,如果 python 代码发生更改,请检查扩展是否需要相应调整。
有关的:
B.JavaScript 到 Python
“ConsolePanel 和 NotebookPanel 现在公开了一个 sessionContext: ISessionContext 属性,该属性允许采用统一的方式与内核会话进行交互。” 来源:https://jupyterlab.readthedocs.io/en/stable/extension/extension_migration.html ?highlight=migration#using-session-and-sessioncontext-to-manage-kernel-sessions
这是一个关于内核消息传递的示例:
https://github.com/jupyterlab/extension-examples/tree/master/kernel-messaging
var notebookPanel = this.__getFirstVisibleNotebookPanel(app);
var sessionContext = notebookPanel.sessionContext;
var kernelConnection = sessionContext.session.kernel;
var future = kernelConnection.requestExecute('1+3');
future.onIOPub = (msg) => {
const msgType = msg.header.msg_type;
switch (msgType) {
case 'execute_result':
case 'display_data':
case 'update_display_data':
var result = msg.content;
console.log(result);
break;
default:
break;
}
return;
};
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1416 次 |
| 最近记录: |