Как я могу скрыть код и перезапустить все ячейки в блокноте Jupyter? - PullRequest
0 голосов
/ 08 февраля 2019

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


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

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

enter image description here

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

enter image description here

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

enter image description here

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

1 Ответ

0 голосов
/ 08 февраля 2019

Я действительно надеюсь, что кто-то сможет дать лучший ответ, но, попробовав и потерпев неудачу в течение нескольких часов, я нашел это:

Просто смешав несколько частей двух фрагментов ввопрос, я могу настроить Refresh button в том же формате, что и Hide Code buttion:

Ouptput / Notebook View:

enter image description here

Но для этого все еще требуются два фрагмента кода в двух разных ячейках, а также некоторый тестовый код в третьей ячейке:

Ячейка / фрагмент 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.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...