2015-09-22 3 views
4

Я пытаюсь использовать виджет с несколькими избранными, чтобы пользователи могли выбирать из списка стран, а затем иметь кнопку виджета, которая при щелчке запускает все ячейки ниже.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) 

Но я не могу найти крюк «запустить все клетки ниже

Благодарности

ответ

7

Если Я правильно понял, что вы можете сделать это через 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) 

Позвольте мне знать, если это то, что вы необходимость.

+0

Это именно то, что я искал. Спасибо :) – colster

+0

Отлично !!! Я видел, что вы также спрашивали о IP-адресе IPython-dev: -D – kikocorreoso

+0

Это работает хорошо, но теперь, когда я его протестировал, когда нажата кнопка, состояние поля множественного выбора теряется, и я не могу захватить ценности. Кажется, что он повторно выполняет ячейку, в которой есть мульти-выбор и кнопка в ней? – colster

3

Чтобы запустить все ячейки ниже текущей ячейки без выполнения ячейки, которая имеет эту кнопку:

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() будет выполнять текущую ячейку, и если в этой ячейке также отображаются другие входы, они получат свои значения по умолчанию.

Смежные вопросы