Jupyter:如何在函数中打印到单元格,从 JavaScript 回调?

Ant*_*kov 1 ipython ipython-notebook jupyter jupyter-notebook ipywidgets

我的问题是关于交互式 Jupyter 笔记本。

我想显示 JavaScript 按钮并在单击按钮时将某些内容打印到单元格。

我们可以使用 ipywidgets 轻松做到这一点:

def OnClick(b=None): print 'qq'
b = widgets.Button(description='Button')
b.on_click(OnClick)
display(b)
Run Code Online (Sandbox Code Playgroud)

但是当我们跳转到纯 JavaScript 时,事情就出错了。即我有 JavaScript 按钮,在 on_click() 事件处理程序中我使用内核交互,如:

var kernel = IPython.notebook.kernel;
kernel.execute('onClick()');         
Run Code Online (Sandbox Code Playgroud)

回调被调用成功(我通过哔声检查),但打印在单元格中没有输出,其中显示按钮。所以我想应该有一些魔法(就像 Python 世界中的一切!)来访问打印区域,你能帮我施展它吗?

Ant*_*kov 6

关键是使用输出小部件

from ipywidgets import widgets
from IPython.display import display, HTML

out = widgets.Output()

def OnClick():
    with out:
        print 'QQQ'

display(HTML('<a onclick="IPython.notebook.kernel.execute(\'OnClick()\')">Click!</a>'))
display(out)
Run Code Online (Sandbox Code Playgroud)