【问题标题】:Exiting ipywidgets interact / interactive to produce a final output in jupyter notebook退出 ipywidgets 交互/交互以在 jupyter notebook 中产生最终输出
【发布时间】:2020-03-20 08:30:04
【问题描述】:

我想对matplotlib 情节的%matplotlib notebook 魔术进行类比。它在右上角有一个“电源按钮” - 单击它后,UI 消失,输出变为最终视图的 PNG。

假设我有一个函数可以使用 int 滑块中的值过滤数据框:

from ipywidgets import interact
# df = pd.read_csv('...')

@interact(zone=(-1, 12))
def show(zone):
    if zone > 0:
        return df[df.ZoneId == zone]  # show filtered results

    if zone == 0:
        return df  # show all results

    # HERE: I want to exit the interaction, and make the int slider disappear, and the whole
    # of df to become the rendered output

我已经尝试创建滑块并将其绑定到某些东西:

zone_slider = IntSlider(0, -1, 12)
@interact(zone=zone_slider)
def show(zone):
    # ...
    zone_slider.close()  # slider disappears, but output is still the same `interactive`.

我希望将输出与笔记本一起保存,并且(在关闭笔记本并使用新内核打开它之后)无需运行任何代码(也不进行交互)即可显示。现在它只显示为intearctive(children=[IntSlider(...), Output(...)], ...)

我想要一个通用解决方案(完成任何交互,例如,当 Checkbox 变为 True 时)。我不确定是否可以不使用较低级别的ipywidgets.interactive 函数或interact_manual,但我不知道如何使用它们。

【问题讨论】:

  • 我没有遵循你想要的。我不明白你问题的第一段与其余部分有何关系。实际上,如果我理解正确,您似乎在这里提出了两个问题:1-如何以编程方式删除 UI 并仅保留输出,以及 2-如何将交互式输出保留在已保存的笔记本上,而不是'interactive(children...'。那正确吗?或者您只对这两个部分中的一个感兴趣?还是我完全弄错了?
  • 是的,我希望交互消失并由IPython.display(<value returned from the decorated function) 替换。对 MPL 的引用只是因为他们的 notebook 后端做了类似的事情。我已经联系了ipywidgets作者,他们说这种方式目前不存在(所以我浪费了一大笔钱......运气不好)。但是,保存小部件的状态对于在笔记本打开时获得“可见结果”大有帮助。

标签: python jupyter-notebook jupyter ipywidgets


【解决方案1】:

1 - 如何以编程方式移除 UI 并仅保留输出

您可以调整this answer 以隐藏/显示小部件。在code_toggle 函数上,您可以添加如下代码:

$('div.widget-slider').hide();

您必须为您使用的每种类型的小部件执行此操作。不要忘记添加.show()

2 - 如何将交互式输出保留在已保存的笔记本上,而不是 'interactive(children...'

我为此找到了一个更具体的问题,没有答案,我回答了here。基本上,从菜单项 WidgetsSave Notebook Widget State 调用操作是一种技巧。

【讨论】:

    猜你喜欢
    • 2018-05-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-10-19
    相关资源
    最近更新 更多