自定义Bokeh Save Tool默认文件名遇TypeScript错误,求助
解决Bokeh自定义Save Tool修改默认文件名的TypeScript错误问题
问题根源
你遇到的TypeScript错误,是因为参考的示例用的是CoffeeScript语法,但当前Bokeh版本默认使用TypeScript,两种语法不兼容(比如CoffeeScript用#注释、->定义函数,TypeScript用//注释、标准JS函数语法)。另外代码里还存在Python端属性名和JS端不匹配、继承类错误的问题。
修正步骤
- 将JS代码转换为TypeScript语法:替换CoffeeScript风格的注释、函数定义为TypeScript标准语法,使用TypeScript的类继承结构实现
ActionToolView和ActionTool - 对齐Python与JS端的属性名:JS里定义的
save_name要和Python端的属性名保持一致 - 修正Python类的继承:自定义工具需要继承
ActionTool而非Tool,因为ActionTool是动作类工具的基类
完整可运行代码
from bokeh.models import ActionTool from bokeh.core.properties import String from bokeh.plotting import figure from bokeh.io import show # TypeScript实现代码,替换原CoffeeScript内容 TS_CODE_SAVE = """ import * as p from "core/properties" import {ActionTool, ActionToolView} from "models/tools/actions/action_tool" export class CustomSaveToolView extends ActionToolView { // 点击按钮时执行的逻辑 override doit(): void { this.plot_view.save(this.model.save_name); } } export class CustomSaveTool extends ActionTool { override default_view = CustomSaveToolView; override type = "CustomSaveTool"; override tool_name = "Save"; override icon = "bk-tool-icon-save"; static override __properties__ = { ...ActionTool.__properties__, save_name: [p.String], } } """ class CustomSaveTool(ActionTool): """自定义Save工具,指定保存文件名""" __implementation__ = TS_CODE_SAVE save_name = String() # 使用自定义工具,指定保存文件名 tools = [CustomSaveTool(save_name='custom_plot_name')] graph1 = figure( title="plottest", tools=tools, sizing_mode="stretch_width", x_axis_label='X_axislabel', y_axis_label='Y_axislabel' ) # 测试显示图表 show(graph1)
说明
- 运行后点击Save工具,保存的文件名将自动变为你指定的
save_name值 - TypeScript代码中使用
override关键字明确重写父类方法/属性,符合TS语法规范 - Python端继承
ActionTool确保自定义工具拥有动作工具的所有基础功能
内容的提问来源于stack exchange,提问作者Ahmad
相关产品推荐
相关产品推荐

