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

ipywidgets能否调用Jupyter Lab的笔记本保存/加载功能及访问is_saved属性?

在Jupyter Lab中用ipywidgets实现保存/加载按钮及访问is_saved属性

一、创建Save和Load按钮

可以通过ipywidgets结合Jupyter Lab的内置命令API实现这两个按钮,核心是通过IPython.display.Javascript调用Jupyter Lab前端的命令:

  1. 导入依赖模块
import ipywidgets as widgets
from IPython.display import display, Javascript
  1. 实现Save按钮
    这个按钮会触发Jupyter Lab的默认保存命令,和手动点击保存按钮效果一致:
save_btn = widgets.Button(description='Save', button_style='success')

def on_save_click(b):
    # 执行Jupyter Lab的保存命令
    display(Javascript("window.jupyterlab.commands.execute('docmanager:save');"))

save_btn.on_click(on_save_click)
  1. 实现Load按钮
    这里的Load指重新加载当前笔记本(刷新页面),如果需要恢复到历史checkpoint,可以替换为对应命令:
load_btn = widgets.Button(description='Load', button_style='info')

def on_load_click(b):
    # 执行页面重新加载命令
    display(Javascript("window.jupyterlab.commands.execute('apputils:reload');"))
    # 如果需要恢复最近的checkpoint,可替换为:
    # display(Javascript("window.jupyterlab.commands.execute('docmanager:restore-checkpoint');"))

load_btn.on_click(on_load_click)
  1. 显示按钮
display(save_btn, load_btn)

二、访问笔记本的is_saved状态

Jupyter Lab中没有直接暴露给Python的is_saved属性,但可以通过前端JS获取文档的dirty状态(dirty=True表示未保存),再传递回Python:

from ipywidgets import Output

output = Output()

# 定义获取保存状态的函数
def fetch_saved_status():
    display(Javascript("""
        // 获取当前活动的笔记本文档
        const active_doc = window.jupyterlab.shell.currentWidget;
        if (active_doc?.context?.model) {
            // dirty为true表示未保存,取反得到is_saved
            const is_saved = !active_doc.context.model.dirty;
            // 将结果赋值给Python全局变量
            IPython.notebook.kernel.execute(`is_saved = ${is_saved}`);
        } else {
            IPython.notebook.kernel.execute(`is_saved = false`);
        }
    """))

# 创建检查按钮
check_status_btn = widgets.Button(description='检查保存状态')

def on_check_status(b):
    with output:
        output.clear_output()
        fetch_saved_status()
        # 打印获取到的状态
        print(f"笔记本已保存: {globals().get('is_saved', '无法获取状态')}")

check_status_btn.on_click(on_check_status)
display(check_status_btn, output)

注意事项

  • 上述代码依赖Jupyter Lab的内部前端API,不同版本的Jupyter Lab可能存在命令或API路径的变化,使用前可通过Jupyter Lab的命令面板Ctrl+Shift+C查看所有命令名称。
  • 恢复checkpoint的命令仅在当前笔记本存在已保存的checkpoint时生效。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.21 11:54:22