Я хотел бы добавить какую-то функциональность в начале Jupyter Notebook, которая скрывает/показывает все ячейки и повторно запускает все ячейки. В итоге я хотел бы получить набор диаграмм, которые обновляются при повторном запуске всех ячеек.
Подробности и то, что я пробовал:
Сообщение IPython — запустить все ячейки ниже из виджета показывает, как вы можете добавить кнопку для повторного запуска всех ячеек ниже. И пост Как скрыть код из ячеек в блокноте ipython, визуализированный с помощью nbviewer?. С этой настройкой в двух разных ячейках я получаю следующее:
Когда ячейки свернуты, это выглядит так:
И это работает довольно хорошо, но мне просто очень любопытно, можно ли отформатировать кнопки так, чтобы они выглядели одинаково. И, может быть, их можно выровнять как вывод из одной и той же ячейки? Я пытался сделать именно это, поместив два фрагмента в одну ячейку, но теперь кажется, что Hide button перезаписывается Refresh button:
Фрагмент 1:
from IPython.display import HTML
HTML('''<script>
function code_toggle() {
if (code_shown){
$('div.input').hide('500');
$('#toggleButton').val('Show code')
} else {
$('div.input').show('500');
$('#toggleButton').val('Hide code')
}
code_shown = !code_shown
}
$( document ).ready(function(){
code_shown=false;
$('div.input').hide()
});
</script>
<form action = "javascript:code_toggle()"><input type = "submit" id = "toggleButton" value = "Show code"></form>''')
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 = "Refresh")
button.on_click(run_all)
display(button)
И теперь я заканчиваю с этим:
Выход 1:
Кто-нибудь знает, как сделать это немного более элегантным?






Я действительно надеюсь, что кто-то сможет дать лучший ответ, но, попробовав пару часов и потерпев неудачу, я нашел это:
Просто смешав несколько частей двух фрагментов в вопросе, я могу настроить Refresh button в том же формате, что и Hide Code buttion:
Выход/просмотр ноутбука:
Но для этого по-прежнему требуются два фрагмента кода в двух разных ячейках, а также некоторый тестовый код в третьей ячейке:
Ячейка / фрагмент 1:
from IPython.display import HTML
HTML('''<script>
function code_toggle() {
if (code_shown){
$('div.input').hide('500');
$('#toggleButton').val('Display code')
} else {
$('div.input').show('500');
$('#toggleButton').val('Hide Code')
}
code_shown = !code_shown
}
$( document ).ready(function(){
code_shown=false;
$('div.input').hide()
});
</script>
<form action = "javascript:code_toggle()"><input type = "submit" id = "toggleButton" value = "Display code"></form>''')
Ячейка / фрагмент 2:
HTML('''<script>
</script>
<form action = "javascript:IPython.notebook.execute_cells_below()"><input type = "submit" id = "toggleButton" value = "Refresh"></form>''')
Ячейка/фрагмент 3:
try: x
except NameError: x = None
if x is None:
x = 0
print(x)
else:
x = x + 1
print(x)
Тем не менее, я до сих пор не могу красиво отобразить две кнопки рядом, и дисплей мерцает, когда я нажимаю Refresh.