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

如何在JupyterLab 4中获取打开的笔记本及单元格列表?

在JupyterLab 4中获取已打开笔记本及单元格列表的实现方案

1. 获取所有已打开的笔记本列表

通过INotebookTracker的widgets属性可直接获取当前所有已打开的笔记本面板实例数组:

const plugin: JupyterFrontEndPlugin<void> = {
  id: '@jupyterlab-examples/toolbar-button:plugin',
  description: 'A JupyterLab extension adding a button to the Notebook toolbar.',
  requires: [INotebookTracker],
  autoStart: true,
  activate: (app: JupyterFrontEnd, notebookTracker: INotebookTracker) => {
    // 获取所有已打开的笔记本
    const openNotebooks = notebookTracker.widgets;
    openNotebooks.forEach(panel => {
      console.log('已打开笔记本:', panel.title.label);
    });
  }
};

export default plugin;

2. 获取指定笔记本中的单元格列表

从笔记本面板的content属性(即Notebook实例)中,通过widgets属性获取所有单元格组件,这些组件支持元数据操作和DOM节点操作:

2.1 遍历当前活跃笔记本的单元格

activate: (app: JupyterFrontEnd, notebookTracker: INotebookTracker) => {
  const activeNotebook = notebookTracker.currentWidget?.content;
  if (activeNotebook) {
    // 获取所有单元格
    const cells = activeNotebook.widgets;
    cells.forEach(cell => {
      // 获取单元格标签元数据
      const tags = cell.model.getMetadata("tags") as string[];
      // 给单元格DOM节点添加自定义类
      cell.node.classList.add('my-custom-cell');
      // 修改并设置元数据
      cell.model.setMetadata("tags", [...tags, 'processed-by-extension']);
    });
  }
}

2.2 监听笔记本打开/切换事件,自动遍历单元格

针对Lab启动时已打开的笔记本,以及后续新打开的笔记本,可通过widgetAdded和currentChanged事件监听:

activate: (app: JupyterFrontEnd, notebookTracker: INotebookTracker) => {
  // 监听新笔记本打开事件(包括Lab启动时恢复的笔记本)
  notebookTracker.widgetAdded.connect((tracker, panel) => {
    const notebook = panel.content;
    const cells = notebook.widgets;
    cells.forEach(cell => {
      // 对每个单元格执行初始化操作
      cell.node.classList.add('initialized-cell');
      console.log('单元格类型:', cell.model.type);
    });
  });

  // 监听活跃笔记本切换事件
  notebookTracker.currentChanged.connect((tracker, panel) => {
    if (!panel) return;
    const notebook = panel.content;
    const cells = notebook.widgets;
    cells.forEach(cell => {
      // 切换活跃笔记本时处理单元格
      console.log('当前笔记本单元格ID:', cell.model.id);
    });
  });
}

核心要点

  • NotebookPanel(即代码中的panel)的content属性对应实际的笔记本实例,其widgets数组包含所有单元格组件
  • 每个单元格组件的model属性支持getMetadata/setMetadata方法操作元数据,node属性可直接访问DOM节点进行类名修改等操作
  • widgetAdded事件会覆盖所有加载完成的笔记本,包括Lab启动时自动恢复的打开状态笔记本,适合批量初始化场景

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.18 04:30:26