【问题标题】:Bokeh: Handling callbacks for unknown (at compile-time) number of buttons散景:处理未知(在编译时)数量的按钮的回调
【发布时间】:2019-12-08 02:59:11
【问题描述】:

我在运行时创建了多个按钮并将它们存储在一个列表中。

keys = []
keys.append(Button(label="-- Parent --"))
for key in node_obj.children.keys():
    keys.append(Button(label=key))

请注意,node_obj 的子项数量可能会有所不同,因此按钮的数量并不总是相同的。我正在尝试为所有按钮创建回调并这样做:

def test_fn(button): 
    print(button.label)

for button in keys:
    button.on_click(lambda : test_fn(button))

但它总是打印列表中最后一个按钮的标签。如何修改它以打印被点击按钮的标签?

【问题讨论】:

    标签: python button callback bokeh


    【解决方案1】:

    这是 Python 工作方式的结果。当 lambda 实际执行时,它使用来自外部作用域的 button 的值——这是循环的最后一个值。您需要使用标准库 functools.partial 函数提前“烘焙”每个不同的按钮:

    from functools import partial
    
    def test_fn(button): 
        print(button.label)
    
    for button in keys:
        button.on_click(partial(test_fn, button=button))
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-10-13
      • 2011-02-19
      • 2013-06-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-02-06
      • 1970-01-01
      相关资源
      最近更新 更多