在Jupyter Notebook中,如何退出ipywidgets的交互模式并生成最终输出?

4

我希望有一个类似于%matplotlib notebook魔法命令的比喻,用于matplotlib绘图。它在右上方有一个“电源按钮”,点击后,UI消失,输出变成最终视图的PNG图片。

假设我有一个使用整数滑块值来过滤数据框的函数:

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`.

我希望输出结果能够与笔记本一起保存,并且在关闭笔记本并使用新内核打开时,无需运行任何代码(也不需要交互),即可显示结果。目前,它只会显示为interactive(children=[IntSlider(...), Output(...)], ...)
我希望有一个通用的解决方案(即在例如Checkbox变为True时结束任何交互)。我不确定是否可以在不借助更低级别的ipywidgets.interactive函数或interact_manual的情况下实现这一点,但我对如何使用这些函数不是很清楚。

我不明白你想要什么。我不理解你问题的第一段与后面的内容有何关联。实际上,如果我理解正确的话,似乎你在这里提出了两个问题:1-如何以编程方式删除UI并仅保留输出,2-如何在保存的笔记本上保留交互式输出,而不是“interactive(children...)”。是这样吗?还是你只对其中一个部分感兴趣?或者我完全理解错了? - caxcaxcoatl
是的,我希望交互式界面消失,并被IPython.display(<value returned from the decorated function)所替代。提到MPL仅因为他们的“notebook”后端做了类似的事情。我已经联系了ipywidgets的作者,他们说目前不存在这样的方法(所以我浪费了一些赏金...真倒霉)。然而,保存小部件的状态在打开笔记本时具有“可见结果”的作用。 - Tomasz Gandor
1个回答

3

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

您可以根据这个答案来隐藏/显示小部件。在code_toggle函数中,您可以添加类似于以下代码的内容:

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

你需要针对每种小部件进行操作,不要忘记添加 .show()

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

我在这里找到了一个更具体的问题,它没有得到回答,我在这里回答了它。 基本上,这是一种从菜单项WidgetsSave Notebook Widget State中调用操作的方法。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接