如何在NiceGUI的Plotly图表中将点击点值赋值给变量?
问题1:自定义函数无法生效的原因
Plotly的plotly_click事件触发时会自动传递事件参数,你的click_notify函数没有定义参数接收这个参数,导致回调无法正常执行。而官方示例里的ui.notify本身支持接收额外参数(即使不用),所以能正常触发。
只需给自定义函数添加参数接收事件对象即可修复:
def click_notify(event): ui.notify()
问题2:获取选中点索引并赋值给NiceGUI可识别的变量
使用NiceGUI的**响应式变量(reactive)**来存储索引,变量变化时UI会自动响应。具体实现如下:
import plotly.graph_objects as go from nicegui import ui # 创建响应式变量,初始值设为-1表示未选中任何点 selected_index = ui.reactive(-1) def handle_plot_click(event): # 从事件参数中提取Plotly的点击数据 click_points = event.args.get('points') if click_points: # 获取第一个点击点的索引(支持多选,这里取第一个为例) idx = click_points[0]['pointIndex'] # 更新响应式变量的值 selected_index.value = idx ui.notify(f"选中点索引:{idx}") fig = go.Figure(go.Scatter(x=[1, 2, 3, 4], y=[1, 2, 3, 2.5])) fig.update_layout(margin=dict(l=0, r=0, t=0, b=0)) plot = ui.plotly(fig).classes('w-full h-40') plot.on('plotly_click', handle_plot_click) # 实时显示当前选中的索引 ui.label(f"当前选中索引:{selected_index}") ui.run()
关键说明:
event.args包含Plotly点击事件的完整数据,points数组存储所有被点击的点信息pointIndex字段对应该点在数据序列中的索引位置- 响应式变量
selected_index被更新后,UI中的标签会自动同步显示最新值,无需手动刷新
内容的提问来源于stack exchange,提问作者DrewGIS
相关产品推荐
相关产品推荐

