kri*_*nab 3 javascript python widget jupyter-notebook
我正在创建一个小部件,它仅执行笔记本中的某些单元格,以根据更改的数据生成新的绘图。虽然 Jupyter 可以执行诸如执行笔记本中的所有单元格或执行当前单元格下方的所有单元格等操作。
相反,我想为我想要有选择地执行的单元格创建标签。然后,当我按下按钮时,我可以执行此代码并运行单元格。
小部件代码本身并不重要——这部分很简单。更难的是弄清楚如何在笔记本中实现python和javascript之间的通信。有人有主意吗。
所以我想通了。我认为其他人一直在寻找类似的答案,所以我发布它。
首先,我必须在笔记本中标记相关单元格。您可以通过笔记本中的“视图”和“单元格工具栏”来完成此操作。
其次,使用这些函数创建一个代码单元。第一个函数将获取具有特定标签的所有单元格。第二个单元将运行具有该标签的所有单元。就我而言,标记名是“plotcell”,但这可以更改为任何内容。在尝试使用此函数之前,该单元需要运行,因此我通常将其设为初始化单元。
%%javascript
window.findCellIndicesByTag = function findCellIndicesByTag(tagName) {
return (Jupyter.notebook.get_cells()
.filter(
({metadata: {tags}}) => tags && tags.includes(tagName)
)
.map((cell) => Jupyter.notebook.find_cell_index(cell))
);
};
window.runPlotCells = function runPlotCells() {
var c = window.findCellIndicesByTag('plotcell');
Jupyter.notebook.execute_cells(c);
};
Run Code Online (Sandbox Code Playgroud)
最后,要运行此代码,您需要使用以下代码:
from IPython.core.display import Javascript
from IPython.display import display
def runPlotCells():
display(Javascript("window.runPlotCells()"))
Run Code Online (Sandbox Code Playgroud)
此代码将执行之前创建的 Javascript 函数来 runPlotCells。我使用该display
函数来抑制笔记本中的输出,并且结果在浏览器开发人员控制台中可见。
然后,您可以在按钮的 on_click 事件之后运行此函数。
应该就是这样。
归档时间: |
|
查看次数: |
2360 次 |
最近记录: |