如何在jupyter笔记本的选项卡式布局中延迟输出? [英] How to lazify output in Tabbed Layout in jupyter notebook?

查看:152
本文介绍了如何在jupyter笔记本的选项卡式布局中延迟输出?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我想使用ipywidgets在jupyter笔记本中创建选项卡式布局.我只想单击特定选项卡的输出.换句话说,将输出延迟化.

I want to create a tabbed layout in jupyter notebook using ipywidgets. I want to process the output of a particular tab only when it is clicked. In other words, lazify the output.

from ipywidgets import widgets

out1 = widgets.Output()
with out1:
    get_output_1()

out2 = widgets.Output()
with out2:
    get_output_2()

out = widgets.Tab([out1, out2])
out.set_title(0, 'out1')
out.set_title(1, 'out2')

display(out)

我希望仅在单击相应的选项卡时才调用功能get_output_1()get_output_2().

I want the functions get_output_1() and get_output_2() to be called only when the corresponding tab is clicked.

请帮帮我.

推荐答案

您可以使用observe函数检测选择了哪个选项卡,然后从词典中选择正确的Output小部件,运行您的函数,然后显示返回值.

You can use the observe function to detect which tab is being selected, and then choose the correct Output widget from a dictionary, run your function and then display the return value.

您可能希望长时间运行的函数具有@lru_cache装饰器,以便在选项卡之间来回滑动时,等待时间较短.

You might want your long running function to have the @lru_cache decorator so that as you flick backwards and forward between tabs you have a shorter wait time.

    from IPython.display import clear_output, display
    import time
    import ipywidgets as widgets
    from functools import lru_cache

    # set up a dictionary of Output widgets
    outputs = {i: widgets.Output() for i in range(0,3)}

    # add the Output widgets as tab childen
    tab = widgets.Tab()
    tab.children = list(outputs.values())
    for i, title in outputs.items():
        tab.set_title(i, 'Tab '+str(i))

    def print_on_select(widget):
    #     get the correct Output widget based on the index of the chosen tab
        tab_idx = widget['new']
        output_widget = outputs[tab_idx]
        with output_widget:
            clear_output()
            print('running long function')
            value = long_running_function(tab_idx)
            clear_output()
            print(value)

    @lru_cache(32)
    def long_running_function(tab_idx):
        time.sleep(2)
        return 'this is tab number ' + str(tab_idx)

    tab.observe(print_on_select, names='selected_index')

    display(tab)

这篇关于如何在jupyter笔记本的选项卡式布局中延迟输出?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆