Виджет в Jupyter Notebook без кода - PullRequest
0 голосов
/ 05 июля 2018

Мы хотели бы создать систему, в которой пользователь мог бы создавать Jupyter Notebook с любой логикой, которая ему нужна, но предоставлял бы дополнительные функциональные возможности на основе нашей существующей системы. Чтобы получить доступ к этим дополнительным функциям, пользователю потребуется помощь от нашего программного обеспечения. Пользователь будет использовать пользовательский интерфейс, который облегчает составление операторов, которые получают доступ к нашей системе. Например, чтобы пользователь мог получить переменную, хранящуюся в нашей системе, нам нужно отобразить список переменных, после того как пользователь выбрал переменную - список ключей имеет переменную, чтобы пользователь мог предоставить значения для этих ключей.

Мы рассматривали расширения NB в JavaScript и, необязательно, в бэкэнде Python. JavaScipt будет запрашивать необходимую информацию через REST, анализировать JSON и заполнять элементы управления соответственно, без проблем. Однако пользователю потребуется нажать кнопку на панели инструментов, чтобы получить доступ к этим диалоговым окнам JavaScript.

Мы столкнулись с виджетами, которые даже более удобны, чем расширения NB. Однако, чтобы разместить виджет в блокноте Jupyter, пользователь должен предоставить код, который импортирует библиотеку ipywidgets, создает виджет, заполняет его данными (если говорить о выпадающем списке, пользователю необходимо вызвать службу REST, проанализировать JSON и заполнить выпадающий список элементами). из JSON) и вставляет его в Блокнот.

Вопрос - можем ли мы как-то объединить силу расширений NB и виджетов? Например, предоставьте шаблон Jupyter Notebook с одним виджетом с надписью «выберите команду». После того, как пользователь сделал выбор, появляется набор виджетов, помогающих составить выбранную команду, оригинальный виджет «команда выбора» исчезает и снова появляется как последний элемент в блокноте. Никакой видимый код в блокноте, связанный с этими виджетами, не должен присутствовать, все это «волшебство» должно быть доставлено как некоторое расширение.

1 Ответ

0 голосов
/ 06 июля 2018

Конечно, можно создать расширение, которое автоматически заполняет первую ячейку ноутбука определенным значением. Это значение теоретически может быть установлено для набора команд Python, которые импортируют правильные модули и вставляют код виджета, а затем программно запускают ячейку, таким образом скрывая код и отображая виджет. Затем код виджета может выполнять большую часть логики выполнения автозаполнения в остальное время.

По сути, вы используете nbextension для автоматического заполнения и заполнения первой ячейки кодом для виджета и запуска указанного виджета. Затем вы делаете все остальное с помощью виджетов.

например. Автопопуляционная клетка с

import ipywidgets as widgets
widgets.IntSlider()

, чтобы получить ползунок в ячейке.

define(function(){
    function load_ipython_extension(){
        //only perform on empty cell i.e. only on a new notebook
        if(Jupyter.notebook.get_cell(0).get_text() === "") {
            var first_cell = Jupyter.notebook.get_cell(0);
            first_cell.set_text("import ipywidgets as widgets\n    widgets.IntSlider()")
            first_cell.execute();
            first_cell.metadata["hide_input"] = true;
            first_cell.element.find("div.input").hide();
        }
    }

    return {
        load_ipython_extension: load_ipython_extension
    };
});

РЕДАКТИРОВАТЬ: Кажется, я неправильно запомнил виджеты, скрывающие код, который их запускал. Взглянув на то, как Hide Input nbextension делает это, я добавил дополнительный код, чтобы скрыть ввод ячейки кода.

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