javascript 跳转到下一个代码单元格(Jupyter笔记本)

8yoxcaq7  于 2023-01-16  发布在  Java
关注(0)|答案(2)|浏览(154)

我想将焦点移到Jupyter笔记本的下一个单元格。我编写了一个Javascript函数,当用户按下HTML按钮时会触发该函数。我使用IPython.core.display.HTML中的功能将此按钮添加到笔记本中。以下是此按钮的HTML部分:按钮onclick=“设置参数();“[在html括号中]。在这个函数中--是的,名字是set_params --我准备了一个应该由Python内核执行的命令。我确定当按钮被按下时,这个命令实际上就完成了。然后,我希望光标移动到下一个单元格--不幸的是,这并没有发生。下面是我的Javascript函数的一部分:

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

我甚至用一些额外的代码检查了索引为i+1的单元格是否真的是单元格,它确实是。为什么焦点不移动?

xwmevbvl

xwmevbvl1#

如果导入Javascript:

from IPython.display import Javascript

您可以执行以下操作:

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

go_to_cell_two()

单元格从索引0开始

tnkciper

tnkciper2#

几百万年后...
最后我调用了3个javascript函数,分别是select_next()focus_cell()execute_selected_cells(),所有这些调用都可以在第一个单元格中合并到一个过程中,然后在每次想跳到下一个单元格时调用这个函数。

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

因此,在没有用户输入的代码的“线性”部分,在每个单元格的末尾调用此函数

run_next(None)

但是,在接口单元格中,只有当用户选择/接受参数并且这些参数正确时,才应调用此函数。

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)

我还没有对这种方法进行广泛的测试,但到目前为止,它工作得很好。

相关问题