簡體   English   中英

跳轉到下一個代碼單元(Jupyter notebook)

[英]Jump to next code cell (Jupyter notebook)

我想將焦點移到我的 Jupyter 筆記本的下一個單元格。 我寫了一個 Javascript function 當用戶按下 HTML 按鈕時觸發。 我通過使用 IPython.core.display.HTML 中的功能將此按鈕添加到我的筆記本中。 這是按鈕的 HTML 部分:button onclick="set_params();" [在 html 括號內]。 在 function - 是的,名稱為 set_params - 我准備了一個應該由 Python kernel 執行的命令。我確定這實際上是在按下按鈕時完成的。 之后,我希望 cursor 移動到下一個單元格 - 不幸的是,這並沒有發生。 這是我的 Javascript function 的一部分:

var command = 'input_params = [' + names + ']';
IPython.notebook.kernel.execute(command);
i = IPython.notebook.get_selected_index();
IPython.notebook.select(i+1);

我什至用一些額外的代碼檢查了索引為 i+1 的單元格是否真的是一個單元格,它確實是。 為什么焦點不動?

如果您導入 Javascript:

from IPython.display import Javascript

您可以執行以下操作:

def goto_cell_two():
    display(Javascript("Jupyter.notebook.execute_cells([2])"))

go_to_cell_two()

單元格從索引 0 開始

幾百萬年后......

因此,我最終調用了 3 個 javascript 函數,即select_next()focus_cell()execute_selected_cells() 所有這些調用都可以在第一個單元格中組合在一個過程中,然后每次要跳轉到下一個單元格時調用這個 function。

def run_next(ev):
    display(Javascript('IPython.notebook.select_next()'))
    display(Javascript('IPython.notebook.focus_cell()'))
    display(Javascript('IPython.notebook.execute_selected_cells()'))

所以在沒有用戶輸入的代碼的“線性”部分,這個 function 在每個單元格的末尾被調用

run_next(None)

但是,在界面單元格中,只有當用戶選擇/接受參數並且這些參數正確時,才應調用此 function。

recacceptbtn = widgets.Button(
    description='Accept',
    disabled=False,
    button_style='success', # 'success', 'info', 'warning', 'danger' or ''
    tooltip='Click to accept',
    icon='check-square'
)
def rec_check_update_runnext(evn):
    # testing parameters
    if recfile.value is not None and recprobe.value is not None:
        # saving parameters
        run_next(evn)
    else:
        display(Markdown('**You must select file and probe!**'))
    
recacceptbtn.on_click(rec_check_update_runnext)

我還沒有對這種方法進行過廣泛的測試,但到目前為止它運行良好並且運行良好。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM