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

问题描述 投票:11回答:3

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

这会显示列表。

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)

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

谢谢

ipython cell jupyter
3个回答
15
投票

如果我理解正确你可以通过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)

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


9
投票

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

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_below()将执行当前单元格,如果此单元格中还显示其他输入,则它们将获得其默认值。


2
投票

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

码:

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>''')

这将为您生成一个按钮,用于运行笔记本中的所有单元格

这种方法的一个额外功能是如果你在github https://github.com/dunovank/jupyter-themes上使用Dunovank的Jupyter主题,按钮的布局将遵循主题选择

我试图附上截图,但我还不能这样做。

© www.soinside.com 2019 - 2024. All rights reserved.