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

如何提取Bokeh套索工具选中的图像列表?

解决Bokeh LassoSelect选中图像列表无法打印到控制台的问题

你的代码无法生效的核心问题是JS回调中使用了HTML转义字符,把&lt;替换成原生JS的<就能修复语法错误,让回调正常执行。

修正后的完整代码

from bokeh.plotting import figure, show
from bokeh.models import LassoSelectTool, ColumnDataSource, CustomJS
import pandas as pd
import glob

folder_path = "C:\\Users\\User_name\\img_folder_path"
image_list = glob.glob(f"{folder_path}/*.jpg", recursive=True) + glob.glob(f"{folder_path}/*.png", recursive=True)

data = {
    'x': [1, 2, 3, 4, 5, 6, 7, 8, 9, 10],
    'y': [10, 9, 8, 7, 6, 5, 4, 3, 2, 1],
    'image_list': image_list[:10]
}
df = pd.DataFrame(data)

source = ColumnDataSource(df)

# 创建散点图
p = figure(width=400, height=400, tools='lasso_select', title='Image')
scatter = p.scatter('x', 'y', source=source)

# 修正后的JavaScript回调
callback = CustomJS(args=dict(source=source), code="""
    const selected_indices = source.selected.indices;
    const selected_image_list = [];
    for (let i = 0; i < selected_indices.length; i++) {
        selected_image_list.push(source.data['image_list'][selected_indices[i]]);
    }
    console.log("Selected Images:", selected_image_list);
""")

# 绑定回调到数据源的选中事件
scatter.data_source.selected.js_on_change('indices', callback)

show(p)

关键修复点

  • 把回调代码中的i &lt; selected_indices.length改为i < selected_indices.length:HTML转义字符&lt;在JS环境中会被当作普通字符串,导致循环条件语法错误,直接使用原生的小于号<才能让JS正确解析。

验证方法

运行修正后的代码,用lasso工具选中散点后,打开浏览器开发者工具(按F12)切换到Console标签,就能看到打印出的选中图像路径列表。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.12 18:31:31