从javascript设置ipython小部件值?

Dou*_*ank 3 javascript ipython jupyter

假设在IPython笔记本中创建了一个ipywidget,如下所示:

from ipywidgets import widgets
i = widgets.IntText()
Run Code Online (Sandbox Code Playgroud)

有没有办法从Javascript设置值?我怀疑我需要知道小部件的一些通讯ID。还是有更好的方法在Python中使用Javascript设置变量?

用例是我想将鼠标单击位置(通过Javascript获得)位置发送回Python。

Dou*_*ank 5

感谢ipython gitter上的SylvainCorlay和jasongrout,他们得以通过以下方式与我交谈:

clicked = function (evt, x_model, y_model) {
    var e = evt.srcElement.farthestViewportElement || evt.target;
    var dim = e.getBoundingClientRect();
    var x = evt.clientX - dim.left;
    var y = evt.clientY - dim.top;
    var manager = IPython.WidgetManager._managers[0];
    var model_prom = manager.get_model(x_model);
    model_prom.then(function(model) {
        model.set('value', Math.round(x));
        model.save_changes();
    });
    model_prom = manager.get_model(y_model);
    model_prom.then(function(model) {
        model.set('value', Math.round(y));
        model.save_changes();
    });
};  
Run Code Online (Sandbox Code Playgroud)

在事件中调用onclick的地方,以及Python的x.model_id和y.model_id。