IPython-从小部件运行下面的所有单元格

IPython-从小部件运行下面的所有单元格,ipython,cell,jupyter,Ipython,Cell,Jupyter,我正在尝试使用一个多选小部件,使用户能够从国家列表中进行选择,然后有一个小部件按钮,当单击该按钮时,将运行下面的所有单元格 这将显示列表 from IPython.display import display w = widgets.SelectMultiple( description="Select up to five countries", options=dfCountries['name'].tolist() ) display(w) 我想要这样的东西来运行

我正在尝试使用一个多选小部件,使用户能够从国家列表中进行选择,然后有一个小部件按钮,当单击该按钮时,将运行下面的所有单元格

这将显示列表

from IPython.display import display
w = widgets.SelectMultiple(

    description="Select up to five countries",
    options=dfCountries['name'].tolist()   
)
display(w)
我想要这样的东西来运行下面的所有单元格:

def run_all(button):
    get_ipython().run_cell()

button = widgets.Button(description="Create next input")
button.on_click(run_all)
display(button)
但我找不到钩子来“运行下面的所有单元格”


谢谢

如果我理解正确,你可以通过js来完成

请参阅以下代码:

from IPython.display import Javascript
Javascript('IPython.notebook.execute_cells_below()')
将执行活动单元格下的所有单元格,因此对于您的按钮,它可能类似于:

from IPython.display import Javascript, display
from ipywidgets import widgets

def run_all(ev):
    display(Javascript('IPython.notebook.execute_cells_below()'))

button = widgets.Button(description="Create next input")
button.on_click(run_all)
display(button)

请告诉我您是否需要此按钮。

要运行当前单元格下的所有单元格,而不执行具有此按钮的单元格,请执行以下操作:

from IPython.display import Javascript, display
from ipywidgets import widgets

def run_all(ev):
    display(Javascript('IPython.notebook.execute_cell_range(IPython.notebook.get_selected_index()+1, IPython.notebook.ncells())'))

button = widgets.Button(description="Run all below")
button.on_click(run_all)
display(button)

这允许当前单元格也提示其他输入和要保留的输入值
IPython.notebook.execute_cells_lower()
将执行当前单元格,如果此单元格中还显示其他输入,则它们将获得其默认值。

您已经收到一些非常好的建议,但我只想提及HTML的一个非常灵活的选项:

代码:

从IPython.core.display导入HTML
HTML(“”)
这将为您生成一个按钮,用于运行笔记本下面的所有单元格

这种方法的一个额外特性是,如果您在github上使用Dunovank提供的Jupyter主题,则按钮的布局将遵循主题选择


我试图附加一个屏幕截图,但我还不能这样做。

这正是我想要的。谢谢:)这工作得很好,但现在我已经测试过了,当点击按钮时,多选框的状态将丢失,我无法捕获值。它似乎重新执行了包含multi-select和按钮的单元格?我遇到了与@colser had相同的问题-所有其他小部件的状态都丢失了,因为“下面执行单元格”重新执行了当前单元格。基本上,我正在尝试构建一个表单UI,用come输入和底部的“Calculate”按钮向用户呈现。你是怎么修好的?你有样本笔记本吗?在我的例子中,我刚刚在一个只有@kikocorreosoNone代码的孤立单元格中添加了代码,这里有一个解决方案对我有效。Javascript无法使用以下代码执行任何操作:
Javascript('IPython.notebook.execute_cells_below()')
嘿,Michael,有没有办法调整它,使其仅运行正下方的单元格而不是所有单元格?我一直在玩这个,不知道如何让它只运行下面的单元格。我尝试了
display(Javascript('IPython.notebook.execute_cell_range(IPython.notebook.get_selected_index()+1,IPython.notebook.get_selected_index()+2))
,但出于某种原因,它会在下面运行多次销售,我不确定原因。
from IPython.core.display import HTML
HTML('''<script> </script> <form action="javascript:IPython.notebook.execute_cells_below()"><input type="submit" id="toggleButton" value="Refresh"></form>''')