Bokeh程序加载时自动触发Button的on_click事件问题求助
嘿,我看到你遇到的问题了——按钮一开始就自动切换标签,点击还没反应,这确实挺让人困惑的。咱们来一步步排查:
首先看你的代码,最后一行有个明显的语法错误:refresh.on_click(change_click))多了一个右括号,这会直接导致程序报错,不过你说程序能加载,可能是输入时的笔误?但更关键的问题是,如果你不小心写成了refresh.on_click(change_click())(也就是给on_click传了函数调用的结果,而不是函数本身),就会出现你描述的情况:
- 程序启动时,
change_click()会被立即执行,所以按钮标签直接变成hello world on_click需要接收一个函数对象,而change_click()没有返回值(默认返回None),所以点击按钮时不会触发任何操作
修正后的代码
from bokeh.models import Button from bokeh.plotting import curdoc refresh = Button(label='refresh') def change_click(): if refresh.label == 'refresh': refresh.label = 'hello world' else: refresh.label = 'refresh' # 注意这里:传递函数对象change_click,不要加括号,也不要多写右括号 refresh.on_click(change_click) curdoc().add_root(refresh)
关键说明
on_click方法需要接收一个函数对象(也就是函数名,不带括号),这样Bokeh才知道点击按钮时要调用这个函数- 如果加了括号
change_click(),相当于直接执行函数,并把返回值传给on_click,这就不是绑定事件了,而是立即执行一次函数 - 别忘了把按钮添加到文档中(用
curdoc().add_root()),否则在Bokeh服务器环境下看不到组件
这样修改后,按钮就会在点击时正常切换标签啦!
内容的提问来源于stack exchange,提问作者Box Hezi
相关产品推荐
相关产品推荐

