web-dev-qa-db-ja.com

IPython-ウィジェットから以下のすべてのセルを実行します

複数選択ウィジェットを使用して、ユーザーが国のリストから選択できるようにし、クリックすると下のすべてのセルを実行するウィジェットボタンを使用しようとしています。

リストが表示されます。

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)

しかし、以下のすべてのセルを実行するためのフックが見つかりません。

ありがとう

12
colster

私が正しく理解していれば、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)

これがあなたが必要なものであるかどうか私に知らせてください。

15
kikocorreoso

このボタンのあるセルを実行せずに、現在のセルの下にあるすべてのセルを実行するには:

_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()は現在のセルを実行し、他の入力もこのセルに表示されている場合は、デフォルト値を取得します。

9

あなたはすでにいくつかの優れた提案を受け取っていますが、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でDunovankのJupyterテーマを使用している場合、ボタンのレイアウトがテーマの選択に従うことです https://github.com/dunovank/jupyter-themes

スクリーンショットを添付しようとしましたが、まだできません。

2
Stian