简体   繁体   English

Jupyter:如何从JavaScript回调到函数中的单元格?

[英]Jupyter: how to print to cell in function, called back from JavaScript?

my question is about interactive Jupyter notebooks. 我的问题是关于交互式Jupyter笔记本。

I want to display JavaScript button and print something to cell as result of button click. 我想显示JavaScript按钮并通过单击按钮将某些内容打印到单元格中。

We can do this easely with ipywidgets: 我们可以使用ipywidgets轻松地做到这一点:

def OnClick(b=None): print 'qq'
b = widgets.Button(description='Button')
b.on_click(OnClick)
display(b)

But when we jumps to pure JavaScript things goes wrong. 但是,当我们跳到纯JavaScript时,就会出错。 Ie I have JavaScript Button, in on_click() event handler I use kernel interaction like: 即我有JavaScript Button,在on_click()事件处理程序中,我使用了内核交互,例如:

var kernel = IPython.notebook.kernel;
kernel.execute('onClick()');         

Callback is called successfuly (I checked by beep), but print produce no output in cell, where by button is displayed. 回调称为成功(我通过蜂鸣声检查),但是打印在单元格中没有产生任何输出,在该单元格中显示“按”按钮。 So I suppose there should be some magic (like everyting in Python world!) to acceess print area, could you please help me to cast it? 因此,我认为在打印区域上应该有一些魔术(例如Python世界中的一切!),您能帮我进行铸造吗?

The key is to use Output widget 关键是使用输出小部件

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)

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM