Как я могу скрыть код и перезапустить все ячейки в блокноте Jupyter?

Я хотел бы добавить какую-то функциональность в начале Jupyter Notebook, которая скрывает/показывает все ячейки и повторно запускает все ячейки. В итоге я хотел бы получить набор диаграмм, которые обновляются при повторном запуске всех ячеек.


Подробности и то, что я пробовал:

Сообщение IPython — запустить все ячейки ниже из виджета показывает, как вы можете добавить кнопку для повторного запуска всех ячеек ниже. И пост Как скрыть код из ячеек в блокноте ipython, визуализированный с помощью nbviewer?. С этой настройкой в ​​​​двух разных ячейках я получаю следующее:

Как я могу скрыть код и перезапустить все ячейки в блокноте Jupyter?

Когда ячейки свернуты, это выглядит так:

Как я могу скрыть код и перезапустить все ячейки в блокноте Jupyter?

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

Как я могу скрыть код и перезапустить все ячейки в блокноте Jupyter?

Кто-нибудь знает, как сделать это немного более элегантным?

Почему в Python есть оператор "pass"?
Почему в Python есть оператор "pass"?
Оператор pass в Python - это простая концепция, которую могут быстро освоить даже новички без опыта программирования.
Некоторые методы, о которых вы не знали, что они существуют в Python
Некоторые методы, о которых вы не знали, что они существуют в Python
Python - самый известный и самый простой в изучении язык в наши дни. Имея широкий спектр применения в области машинного обучения, Data Science,...
Основы Python Часть I
Основы Python Часть I
Вы когда-нибудь задумывались, почему в программах на Python вы видите приведенный ниже код?
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
Алиса и Боб имеют неориентированный граф из n узлов и трех типов ребер:
Оптимизация кода с помощью тернарного оператора Python
Оптимизация кода с помощью тернарного оператора Python
И последнее, что мы хотели бы показать вам, прежде чем двигаться дальше, это
Советы по эффективной веб-разработке с помощью Python
Советы по эффективной веб-разработке с помощью Python
Как веб-разработчик, Python может стать мощным инструментом для создания эффективных и масштабируемых веб-приложений.
2
0
1 093
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 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.

Другие вопросы по теме