首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何通过IPython小部件交互地更新jupyter笔记本中的标记单元格?

如何通过IPython小部件交互地更新jupyter笔记本中的标记单元格?
EN

Stack Overflow用户
提问于 2019-04-27 11:03:36
回答 1查看 1.4K关注 0票数 0

我使用的是带有Python3内核的木星笔记本。我有一个基于IPython小部件的用户输入的计算。计算结果需要显示在标记单元格中。为此,我使用Python nb扩展名。现在的问题是:如何更新用户交互上的标记单元格?

我尝试使用Javascript调用从python运行标记单元。作为一个最小的例子,以下两个单元可以服务。(第一正常巨蟒细胞,第二标记细胞)

代码语言:javascript
运行
复制
from IPython.display import Javascript
import ipywidgets

def update_md_cell(slider_value):
    Javascript("Jupyter.notebook.execute_cells([1])")

t_slider = ipywidgets.IntSlider(min = 0, max = 10,  value = 10)
ipywidgets.interactive(update_md_cell, slider_value = t_slider)
代码语言:javascript
运行
复制
... The value of number is {{t_slider.value}}. ...

但这似乎只在功能之外起作用。

代码语言:javascript
运行
复制
Javascript("Jupyter.notebook.execute_cells ([1])")

重新加载标记单元。

代码语言:javascript
运行
复制
def update_md_cell():
    Javascript("Jupyter.notebook.execute_cells ([1])")
update_md_cell()

什么都不做。

是否有另一种方法将输入(通过IPython小部件)连接到输出(在Markdown单元中)?

更新:就像苏拉杰·波托努回答的评论中提到的,我的基本问题是从here得到的答案

一个大问题是:某个地方需要返回Javascript作为它的输出,否则它不会在笔记本中执行。

但更糟糕的是,via ipywidgets.interactive()绑定函数中的返回不足以修复这个问题,例如:

代码语言:javascript
运行
复制
def update_md_cell():
    return Javascript("Jupyter.notebook.execute_cells ([1])")
update_md_cell()

很管用。

代码语言:javascript
运行
复制
from IPython.core.display import Javascript
from IPython.display import display
import ipywidgets

def update_md_cell(slider_value):
    return Javascript("Jupyter.notebook.execute_cells ([1])")

t_slider = ipywidgets.IntSlider(min = 0, max = 10,  value = 10)
ipywidgets.interactive(update_md_cell, slider_value = t_slider)

不起作用。

我怎么才能得到第二个工作呢?

EN

回答 1

Stack Overflow用户

发布于 2019-04-27 12:26:24

将foo()函数更新为以下代码

代码语言:javascript
运行
复制
def foo():
    slider_value = t_slider.value 
    display(Javascript("var markdown_cell = IPython.notebook.get_cell(1);markdown_cell.set_text('The value of the number is "+ str(slider_value) +"');IPython.notebook.execute_cell(1)"))

上面的代码片段获取滑块对象的值,并使用get_cell()函数获取第一个单元,即标记单元。单元格编号从0开始,因此第0单元是您的python代码单元,第1单元是您的标记单元。

它使用set_text()函数使用最新的滑块值更新单元格内的标记。

每当您的滑块被更新以更新标记时,请调用foo()函数。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/55879883

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档