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

col*_*ter 12 cell ipython jupyter

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

这会显示列表.

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

    description="Select up to five countries",
    options=dfCountries['name'].tolist()   
)
display(w)
Run Code Online (Sandbox Code Playgroud)

我想要这样的东西运行下面的所有单元格:

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

button = widgets.Button(description="Create next input")
button.on_click(run_all)
display(button)
Run Code Online (Sandbox Code Playgroud)

但我找不到"运行下面所有细胞的钩子"

谢谢

kik*_*oso 15

如果我理解正确你可以通过js做到这一点.

请参阅以下代码:

from IPython.display import Javascript
Javascript('IPython.notebook.execute_cells_below()')
Run Code Online (Sandbox Code Playgroud)

将执行活动单元格下面的所有单元格,因此对于按钮,它可能是这样的:

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)
Run Code Online (Sandbox Code Playgroud)

如果这是你需要的,请告诉我.

  • 我遇到了与@colser相同的问题 - 所有其他小部件的状态都丢失了,因为"execute_cells_below"重新执行当前单元格.基本上,我正在尝试构建一个表单UI,以便向用户显示输入和底部的"计算"按钮.你怎么修好它的?你有一个样品笔记本吗? (2认同)
  • 这里的解决方案都不适合我。Javascript 无法使用以下代码执行任何操作:`Javascript('IPython.notebook.execute_cells_below()')` (2认同)

小智 10

要在当前单元格下运行所有​​单元格而不执行具有此按钮的单元格:

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)
Run Code Online (Sandbox Code Playgroud)

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