【问题标题】:How to get ipywidgets interact to work in HTML?如何让 ipywidgets 交互以在 HTML 中工作?
【发布时间】:2026-02-05 09:55:02
【问题描述】:

我有一个带有以下单元格的 Jupyter 笔记本:

from ipywidgets import widgets, interact
slider = widgets.IntSlider()
def print_val(v):
  print(v)
interact(print_val,v=slider)

这在笔记本中运行良好 - 当我更改滑块时,打印输出会发生变化。但是当我使用nbconvert 将笔记本转换为 HTML 时,滑块在输出 HTML 中仍然可以正常呈现,但对打印输出没有影响。
知道如何让它工作吗?也许 ipywidgets 不是这类东西的正确库?
谢谢!

【问题讨论】:

    标签: python jupyter-notebook jupyter ipywidgets nbconvert


    【解决方案1】:

    我想你想念nbconvert 所做的事情。此实用程序用于将笔记本转换为其他格式,例如 PDF、LATEX 等。它用于共享和演示。一旦笔记本被转换,就会失去交互选项。

    Jupyter notebook 的交互性由 Jupyter 服务器提供,当您从命令行调用 jupyter notebook 时启动该服务器。

    因此,当您将笔记本保存为网页或将其转换为 HTML 时,您没有处理所有更改的服务器后端部分。这是一个静态网页。因为滑块是一个标准元素,所以它可以正确渲染,但是当你滑动它时什么也没有发生:没有任何“附加”到它来处理事件。

    最后,为了能够与 Jupyter notebook 交互,您需要运行某种 Jupyter 服务器。如果您只需要它自己,它可以是本地服务器,或者如果您想与他人协作,您可以使用 Google Colab(或 Jupyter Hub)。

    此外,还有几种解决方案可以让人们在图表上进行一些交互,例如BokehPlotly。它们还要求您运行某种服务器。

    当然,只有当您需要 Python 来处理您的数据时,所有这些才是相关的。如果您的需求很简单,例如显示滑块值,最好使用简单的 Javascript,它可以直接在浏览器中处理滑块更改,而无需在后端运行任何服务器。

    【讨论】:

    • 感谢您的回答。我完全了解交互式笔记本和静态 HTML 页面之间的区别。我的目标是创建一个交互式图形报告(我使用 plotly - 效果很好),可以分发给人们,他们可以在不需要运行 jupyter 服务器的情况下浏览报告。看起来这不是最好的方法。
    • 如果你已经在使用plotly,你可以尝试在你的图上运行:plotly.offline.plot(my_fig, filename=’my_example.html’)。如果这个数字不太复杂,你可能会得到你想要的东西。 Plotly 是围绕 Javascript 构建的,因此它会处理大部分管道。
    • 查看更多信息here