You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Jupyter Notebook的Tabbed Layout中实现输出懒加载?

Lazy Loading Tab Content in ipywidgets

Got it, I see what you're trying to do—right now your code runs get_output_1() and get_output_2() immediately when the notebook cell executes, even if the user never clicks those tabs. Let's adjust this to only run those functions when the corresponding tab is first clicked.

Here's how to implement lazy loading for your Tab layout:

Step-by-Step Solution

First, we'll create empty Output widgets instead of populating them upfront. Then we'll add a listener to the Tab's selected_index property, and only run the output-generating functions when a tab is first activated. We'll also track which tabs have already been loaded to avoid re-running the functions multiple times.

Full Working Code

from ipywidgets import widgets

# Create empty Output widgets (no upfront execution)
out1 = widgets.Output()
out2 = widgets.Output()

# Track which tabs have been loaded to avoid duplicate function calls
loaded = {0: False, 1: False}

def get_output_1():
    # Replace with your actual output logic
    print("Loading content for Tab 1...")
    # Add your widgets/print statements here

def get_output_2():
    # Replace with your actual output logic
    print("Loading content for Tab 2...")
    # Add your widgets/print statements here

def on_tab_selected(change):
    selected_tab = change['new']
    # Check if the tab hasn't been loaded yet
    if not loaded[selected_tab]:
        with [out1, out2][selected_tab]:
            # Run the corresponding output function
            [get_output_1, get_output_2][selected_tab]()
        # Mark the tab as loaded
        loaded[selected_tab] = True

# Create the Tab and set titles
tab = widgets.Tab([out1, out2])
tab.set_title(0, 'out1')
tab.set_title(1, 'out2')

# Attach the listener to the Tab's selected_index property
tab.observe(on_tab_selected, names='selected_index')

# Handle the default selected tab (index 0) if you want it loaded on startup
# Uncomment the line below if you want the first tab loaded immediately
# on_tab_selected({'new': 0})

display(tab)

How It Works

  • Empty Output Widgets: We initialize out1 and out2 without running get_output_1()/get_output_2() upfront—this saves computation until the user actually needs the content.
  • Loaded Tracking: The loaded dictionary keeps track of which tabs have already been processed, so we don't re-run expensive functions every time the user switches back to a tab.
  • Tab Selection Listener: The on_tab_selected function triggers whenever the user switches tabs. It checks if the tab is unloaded, runs the corresponding function (capturing its output in the correct Output widget), then marks the tab as loaded.
  • Optional Default Load: If you want the first tab to load immediately when the widget is displayed, uncomment the on_tab_selected({'new': 0}) line.

This approach ensures that your output-generating functions only run when necessary, which is perfect for heavy computations or slow data loading tasks.

内容的提问来源于stack exchange,提问作者Govinda Totla

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.13 09:11:14