【问题标题】:How to pass additional arguments when updating a matplotlib widget更新 matplotlib 小部件时如何传递其他参数
【发布时间】:2022-01-22 04:33:38
【问题描述】:

我有多个类似的Sliders,并且想在更改相应的滑块时使用某个参数调用函数update。传递附加参数的工作方式应该与其他小部件类似,例如 on_clicked()Button

使用base code from Slider demo的简化示例:

def update(val, string):
    line.set_ydata(f(t, amp_slider.val, freq_slider.val))
    print(string)
    fig.canvas.draw_idle()

freq_slider.on_changed(update("Frequency updated"))
amp_slider.on_changed(update("Amplitude updated"))

以下内容根本没有通过更新的val,因此显然不起作用。根据documentation on_changed 只接受一个可调用函数作为参数。有没有办法在不以某种方式合并mpl_connect 的情况下解决这个问题,例如使用lambda 函数?

【问题讨论】:

    标签: python matplotlib lambda matplotlib-widget


    【解决方案1】:

    您可以使用lambda 调用带有附加参数的update。注意new_val实际上是这里滑块的当前值。

    freq_slider.on_changed(lambda new_val: update(new_val, "Frequency updated"))
    

    以下是使用之前修改过的代码的示例

    def update(val, string="Updated without additional string param"):
        line.set_ydata(f(t, amp_slider.val, freq_slider.val))
        print(string)
        fig.canvas.draw_idle()
    
    
    freq_slider.on_changed(lambda new_val: update(new_val, "Frequency updated"))
    amp_slider.on_changed(update)  # no string arg
    

    【讨论】:

      猜你喜欢
      • 2020-06-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-06-30
      • 2018-09-24
      • 1970-01-01
      相关资源
      最近更新 更多