如何提取Bokeh套索工具选中的图像列表?
解决Bokeh LassoSelect选中图像列表无法打印到控制台的问题
你的代码无法生效的核心问题是JS回调中使用了HTML转义字符,把<替换成原生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 < selected_indices.length改为i < selected_indices.length:HTML转义字符<在JS环境中会被当作普通字符串,导致循环条件语法错误,直接使用原生的小于号<才能让JS正确解析。
验证方法
运行修正后的代码,用lasso工具选中散点后,打开浏览器开发者工具(按F12)切换到Console标签,就能看到打印出的选中图像路径列表。
内容的提问来源于stack exchange,提问作者SKORM
相关产品推荐
相关产品推荐

