如何在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
相关产品推荐
相关产品推荐

