2017-01-10 121 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