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

Bokeh技术问题:实现AutocompleteInput与Slider触发同一回调

Bokeh回调函数配置问题解决方案

核心问题定位

  1. 滑块值类型不匹配:Slider组件的value是数值类型(int),但原代码中用字符串(如"1")做比较,导致所有滑块相关的条件判断失效,无法正确切换数据源。
  2. 条件分支冗余:大量elif语句使代码冗余、不易维护。

修正后的代码

from bokeh.models import ColumnDataSource, AutocompleteInput, Slider

source = ColumnDataSource(data=dict(colors=color, colors_pred_data=colors_pred_labels))

autocomp = AutocompleteInput(title="", completions=product_names, case_sensitive=False)
heat_slider = Slider(start=1, end=11, value=6, step=1, title="Heat")

# 用字典映射滑块值到对应数据源,替代冗长的elif链
slider_source_map = {
    1: product_sources0_001,
    2: product_sources0_01,
    3: product_sources0_05,
    4: product_sources0_1,
    5: product_sources0_25,
    6: product_sources0_5,
    7: product_sources,
    8: product_sources10,
    9: product_sources50,
    10: product_sources100,
    11: product_sources500
}

def marker_callback(attr, old, new):
    current_product = autocomp.value
    current_heat = heat_slider.value
    
    if current_product == "Ecosystem":
        # 直接替换整个data字典,保证数据一致性
        source.data = dict(colors=color, colors_pred_data=colors_pred_labels)
    else:
        # 可选容错:避免产品名称不存在时抛出KeyError
        if current_product not in product_values or current_product not in slider_source_map[current_heat]:
            return
        source.data = {
            'colors_pred_data': product_values[current_product],
            'colors': slider_source_map[current_heat][current_product]
        }

heat_slider.on_change('value', marker_callback)
autocomp.on_change('value', marker_callback)

优化说明

  • 修复类型匹配问题:将滑块值的比较改为与整数(如1)对比,确保条件判断生效。
  • 简化条件逻辑:用字典映射滑块值到数据源,删除冗余elif,代码更简洁易维护。
  • 批量更新数据源:直接替换source.data为完整字典,比单独修改键值对更高效,避免部分更新导致的数据不一致。
  • 增加容错处理:添加产品名称存在性校验,防止无效输入引发异常。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.19 15:42:17