Я использую ноутбук Jupyter с ядром Python 3. У меня есть вычисление, основанное на вводе пользователя с помощью виджета IPython. Результат вычисления необходимо отобразить в ячейке уценки. Для этого я использую nbextension Python Markdown. Теперь возникает вопрос: как мне обновить ячейку уценки при взаимодействии с пользователем?
Я попытался запустить ячейку уценки из Python с помощью вызова Javascript. В качестве минимального примера могут служить следующие две ячейки. (Первая нормальная ячейка Python, вторая ячейка уценки)
from IPython.display import Javascript
import ipywidgets
def update_md_cell(slider_value):
Javascript("Jupyter.notebook.execute_cells([1])")
t_slider = ipywidgets.IntSlider(min = 0, max = 10, value = 10)
ipywidgets.interactive(update_md_cell, slider_value = t_slider)
... The value of number is {{t_slider.value}}. ...
Но, похоже, это работает только вне функций.
Javascript("Jupyter.notebook.execute_cells ([1])")
перезагружает ячейку уценки.
def update_md_cell():
Javascript("Jupyter.notebook.execute_cells ([1])")
update_md_cell()
ничего не делает.
Есть ли другой способ подключить входы (через виджет IPython) к выходу (в ячейке Markdown)?
Обновление: как упоминалось в комментарии к ответу Сураджа Потнуру, моя основная проблема - это ошибка из здесь:
Большая проблема: что-то где-то должно возвращать Javascript в качестве вывода, иначе это не будет выполнено в записной книжке.
Но что еще хуже, возврата в связанной функции via ipywidgets.interactive () недостаточно, чтобы исправить ошибку, например:
def update_md_cell():
return Javascript("Jupyter.notebook.execute_cells ([1])")
update_md_cell()
работает.
from IPython.core.display import Javascript
from IPython.display import display
import ipywidgets
def update_md_cell(slider_value):
return Javascript("Jupyter.notebook.execute_cells ([1])")
t_slider = ipywidgets.IntSlider(min = 0, max = 10, value = 10)
ipywidgets.interactive(update_md_cell, slider_value = t_slider)
не работает.
Как заставить вторую работать?