Я загружаю список файлов с checkbox
для фильтрации с помощью ipywidgets
:
from ipywidgets import Checkbox, interact, Layout, Button
import ipywidgets as widgets
import glob
from traitlets import traitlets
from IPython.display import display, clear_output
class LoadedButton(widgets.Button):
def __init__(self, value=None, *args, **kwargs):
super(LoadedButton, self).__init__(*args, **kwargs)
# Create the value attribute.
self.add_traits(value=traitlets.Any(value))
def file_list(**all_kwargs):
cols = [k for k, v in all_kwargs.items() if v==True]
return cols
def reload_files(rr):
for c in all_files:
c.close()
clear_output()
print('Unselect the csv files above *to EXCLUDE*')
rr.value =interact(file_list, **all_kwargs)
return rr
extension = 'csv' # extention of file you want to read, csv, dat, etc.
all_file_list = [i for i in glob.glob('*.{}'.format(extension))]
all_files = [Checkbox(description=a, value=True) for a in all_file_list ]
all_kwargs = {c.description: c.value for c in all_files}
lb = LoadedButton(description="Load/reload file list", value=None)
lb.on_click(reload_files)
display(lb)
Я хочу перезаписывать предыдущие выходные данные (как виджет, так и выходные данные виджета) каждый раз, когда я нажимаю кнопку, созданную с помощью виджета «Кнопка», но вместо перезаписи он создает другой экземпляр вывода. Я пробовал оба варианта clear_output
и widget.close()
, но ничего не помогает. Я знаю, что clear_output
не должен очищать виджет, но я ожидаю, что это будет возможно с помощью close()
. Кто-нибудь знает, как очистить/перезаписать ipywidgets, а также выходные данные ipywidget при перезагрузке с помощью кнопки?
display
вызывает проблему, как вы также узнали. Но предложенное решение теперь замораживает элементы контрольного списка ipywidgets, т. е. даже при замене csv-файлов на новые в каталоге отображаемый список файлов остается прежним в записной книжке. Он просто добавляет перезагрузку... каждый раз, когда я нажимаю кнопку перезагрузки, не заменяя существующий список новыми именами файлов. - person Ashish   schedule 08.08.2017