【发布时间】: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