Мне интересно, можно ли очистить область виджета ячейки в записной книжке Jupyter со стороны записной книжки (то есть в Python). IPython.display.clear_output()
очищает только область вывода ячейки, но не область виджетов.
Обновление: это все еще проблема в последних версиях Notebook и ipywidgets. Вот два минимальных примера, иллюстрирующих проблему, с которой я борюсь. Выходные данные виджета, которые я пытаюсь очистить, — это фреймы данных, отображаемые qgrid. В обоих случаях, несмотря на попытку очистить предыдущий вывод виджета, при последующем выборе таблица добавляется после предыдущей. Каждая новая таблица добавляется как div с классом p-Widget
.
import pandas as pd
import numpy as np
import qgrid
from ipywidgets import interact
from IPython.display import display, clear_output
import notebook
import ipywidgets
print('Jupyter Notebook version: {}'.format(notebook.__version__))
print('ipywidgets version: {}'.format(ipywidgets.__version__))
max_columns = 10
max_rows = 10
col_opts = list(range(1, max_columns + 1))
row_opts = list(range(1, max_rows + 1))
Первая попытка использования взаимодействия:
@interact(columns=col_opts, rows=row_opts)
def submit(columns, rows):
df = pd.DataFrame(np.random.randint(0, 100, size=(rows, columns)))
clear_output()
display(qgrid.QGridWidget(df=df)
Вторая попытка использования виджета вывода:
output = ipywidgets.Output()
display(output)
def submit2(change):
rows = row_input.value
columns = col_input.value
df = pd.DataFrame(np.random.randint(0, 100, size=(rows, columns)))
with output:
output.clear_output()
display(qgrid.QGridWidget(df=df))
col_input = ipywidgets.Dropdown(options=col_opts)
row_input = ipywidgets.Dropdown(options=row_opts)
col_input.observe(submit2, 'value')
row_input.observe(submit2, 'value')
display(col_input)
display(row_input)
Возможный дубликат выходных данных чистой ячейки записной книжки ipython в коде — person nedned schedule 26.02.2018
It is! It’s
IPython.display.clear_output()
:https://ipython.org/ipython-doc/dev/api/generated/IPython.display.html#IPython.display.clear_output
ОБНОВЛЕНИЕ:
Я пробовал это, но похоже, что это очищает только подобласть вывода ячейки, но не подобласть виджета ячейки. то есть содержимое div с классом widget-subarea. Это неожиданно? — person nedned; 15.03.2017
Это исправлено в ipywidgets 6, но зависит от ноутбука 5, который доступен в виде бета-версии на PyPI и будет официально выпущен примерно через неделю. Подробнее см. github.com/ipython/ipywidgets/pull/1098. — person nedned; 17.03.2017
Я только что попытался использовать ноутбук 5 / ipywidgets 6, но, похоже, он все еще не работает. Обновили мой вопрос моими минимальными примерами, показывающими мои попытки. Любые идеи? — person nedned; 08.04.2017
В блокноте Jupyter вы можете очистить всю информацию (текст и виджеты), выполнив «Cell / Current Outputs / Clear».
Если вы хотите сделать это программно, вам нужно сделать
clear_output()
, чтобы очистить текст, иw.close()
(будучи w виджетом) в каждом созданном вами виджете. Подробнее здесь («Закрытие виджетов«): https://ipywidgets.readthedocs.io/en/latest/examples/Widget%20Basics.htmlВ вашем примере (по крайней мере, во второй попытке) вам нужно добавить:
Я тестировал его с этими версиями:
Начиная с ipywidgets 7.0, виджеты отображаются так же, как и любой другой вывод. Как следствие,
clear_output()
очистит весь вывод ячейки, включая виджеты.Начиная с версии ipywidgets 7.0 и выше, виджеты рассматриваются как любой другой вывод. Чтобы предотвратить очистку виджетов (но очистку вывода текста) при выполнении
clear_output()
, используйте Виджет вывода. Что-то вроде этого :Отличный пример! Я пытаюсь использовать то, что вы
clear_output()
в моем примере, в котором мне нужно поместить код как частьClass
. Не могли бы вы проверить мой пост, если знаете? stackoverflow.com/questions/59719207 / — person nedned; 14.01.2020