我正在创建一个小部件,它将仅执行笔记本中的某些单元格——以根据更改的数据生成新的绘图。而 Jupyter 可以执行诸如执行笔记本中的所有单元格,或执行当前单元格下的所有单元格等操作。
相反,我想为要有选择地执行的单元格创建标签。然后,当我按下按钮时,我可以执行此代码并运行单元格。
小部件代码本身并不重要——那部分很简单。更难的是弄清楚如何在笔记本中实现 python 和 javascript 之间的通信。有人有主意吗。
最佳答案
所以我想通了。我认为其他人一直在寻找与此类似的答案,所以我将其发布。
首先,我必须在笔记本中标记相关的单元格。您可以通过笔记本中的“ View ”和“单元格工具栏”来完成。
其次,使用这些函数创建一个代码单元。第一个函数将得到 所有具有特定标签的单元格。第二个单元将运行所有具有 那个标签。在我的例子中,标记名是“plotcell”,但这可以更改为任何内容。这个cell需要在尝试使用这个函数之前运行,所以我通常把它作为一个初始化cell。
%%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);
};
最后,要运行此代码,您需要使用以下代码:
from IPython.core.display import Javascript
from IPython.display import display
def runPlotCells():
display(Javascript("window.runPlotCells()"))
此代码将执行先前创建的 Javascript 函数以运行 PlotCells。我使用了 display
函数,以便笔记本中的输出被抑制,结果在浏览器开发人员控制台中可见。
然后在按钮的 on_click 事件之后运行此函数。
应该就是这样。
关于javascript - Jupyter 笔记本 : How do I execute only cells that have a particular tag,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50921297/