JupyterLab扩展开发:如何在index.ts中触发导出可执行脚本命令
存在的问题
- activate回调中错误创建了新的JupyterLab实例,没有使用当前运行的JupyterLab实例,导致命令调用上下文错误
notebook:export-to-format命令的参数传递错误,该命令需要两个必填参数:path(当前Notebook文件的路径)和format(导出格式标识,可执行脚本对应值为script),而非你使用的formatLabel- 插件声明的依赖
ITranslator、INotebookTracker没有实际使用,也没有在activate回调中接收对应的实例参数
修正后的完整代码
import { JupyterFrontEnd, JupyterFrontEndPlugin, } from '@jupyterlab/application'; import { ToolbarButton } from "@jupyterlab/apputils"; import { DocumentRegistry } from "@jupyterlab/docregistry"; import { INotebookModel, NotebookPanel } from "@jupyterlab/notebook"; import { IDisposable } from "@lumino/disposable"; export class ButtonExtension implements DocumentRegistry.IWidgetExtension<NotebookPanel, INotebookModel> { constructor(app: JupyterFrontEnd) { this.app = app; } readonly app: JupyterFrontEnd; createNew(panel: NotebookPanel, context: DocumentRegistry.IContext<INotebookModel>): IDisposable { const { commands } = this.app; const command = 'notebook:export-to-format' // 创建工具栏按钮 let mybutton = new ToolbarButton({ label: 'Measure Power Usage', onClick: async () => { alert('You did it'); // 传递正确的命令参数 await commands.execute(command, { path: context.path, format: 'script' }); } }); // 将按钮插入Notebook工具栏 panel.toolbar.insertItem(10, 'MeasurePowerUsage', mybutton); console.log("MeasPowerUsage activated"); return mybutton; } } /** * greencode-ext3扩展的初始化配置 */ const yourPlugin: JupyterFrontEndPlugin<void> = { id: '@your-org/plugin-name', autoStart: true, // 移除未使用的依赖声明 requires: [], activate: (app: JupyterFrontEnd) => { // 直接传入当前运行的Jupyter实例 const your_button = new ButtonExtension(app); app.docRegistry.addWidgetExtension('Notebook', your_button); } } export default yourPlugin;
内容的提问来源于stack exchange,提问作者Trevor Villwock
相关产品推荐
相关产品推荐

