2017-01-10 55 views
3

我正在使用Jupyter笔记本,并试图根据Github上找到的模板创建一个小部件。Jupyter笔记本,Python:如何从函数内部调用魔法?

该模板在某些时候使用魔术%%javascript。当直接粘贴在笔记本的单元格中时,它可以正常工作。

然而,当我试图做一个功能了widget的,具有%%javascript表达使其返回错误:

%%javascript SyntaxError: invalid syntax

任何人知道如何“转换”神奇命令,以便它可以(函数保存在一个单独的文件中)

回答

3

如果你使用IPython内建的?,你可以看到魔法的路径。例如,%%javascript?表示它在lib\site-packages\ipython\core\magics\display.py

然后,您可以将其导入并将其用作标准;例如,下面的弹出,如果你从笔记本电脑运行一个提示框:

from IPython.core.magics.display import Javascript 
Javascript('alert("hello world")') 

编辑:为了让你在发表的评论工作的例子,只是包装的JavaScript你想在引号运行并用Javascript来称呼它。替换In[4]与此正常弹出窗口,应该罚款包括在一个正常的Python函数。

from IPython.core.magics.display import Javascript 
Javascript("""$('div.inspector') 
    .detach() 
    .prependTo($('body')) 
    .css({ 
     'z-index': 999, 
     position: 'fixed', 
     'box-shadow': '5px 5px 12px -3px black', 
     opacity: 0.9 
    }) 
    .draggable();""") 
+0

你知道如何在函数中调用Javascript吗?如果使用'%% javascript'调用原始块,则工作正常。但是,一旦我将它的单元格与之前的代码合并(在将它变成函数之前),我会收到有关美元符号的错误消息。 '无效的语法'。我试图要工作的代码块如下:'%% javascript $('div.inspector') .detach() .prependTo($('body')) .css({ 'z索引':999, 位置: '固定', '箱阴影': '5像素5像素12像素-3px黑', 不透明度:0.9 }) .draggable();' – Radar

+0

实际上也许这更清楚:这是我试图作为一个函数的片段:https://github.com/ipython/ipywidgets/blob/master/docs/source/examples/Variable%20Inspector.ipynb。问题来自于[4]中的单元格, – Radar