Следуя учебнику с сохранением состояния , мы можем создать простой DOM-виджет. Вот код Python:
import ipywidgets.widgets as widgets
from traitlets import Unicode
class HelloWidget(widgets.DOMWidget):
_view_name = Unicode('HelloView').tag(sync=True)
_view_module = Unicode('hello').tag(sync=True)
_view_module_version = Unicode('0.1.0').tag(sync=True)
value = Unicode('Hello World!').tag(sync=True)
И код JavaScript:
%%javascript
require.undef('hello');
define('hello', ["@jupyter-widgets/base"], function(widgets) {
var HelloView = widgets.DOMWidgetView.extend({
render: function() {
this.el.textContent = this.model.get('value');
},
});
return {
HelloView : HelloView
};
});
Это работает так, как указано в блокноте:
In [1]: HelloWidget()
Out [1]: Hello World!
Теперь, если я хочу сохранить состояние виджета value
в экземпляре объекта, я могу изменить код Python так, чтобы он выглядел следующим образом:
import ipywidgets.widgets as widgets
from traitlets import Unicode
class HelloWidget(widgets.DOMWidget):
_view_name = Unicode('HelloView').tag(sync=True)
_view_module = Unicode('hello').tag(sync=True)
_view_module_version = Unicode('0.1.0').tag(sync=True)
def __init__(self, s):
super().__init__()
self.value = Unicode(s).tag(sync=True)
Однако это не работает; состояние не отображается в выходной ячейке, как ожидалось (без вывода):
In [1]: HelloWidget("Hello World!")
Out [1]:
Как это можно сделать?