使用按钮在带有参数化 Class 的面板中触发操作,当按钮操作完成时更新另一个依赖项 (Holoviz)

Use button to trigger action in Panel with Parameterized Class and when button action is finished have another dependency updated (Holoviz)

我正在使用参数化 Class 使用 Panel Holoviz 构建仪表板。

在这个 Class 中,我想要一个按钮,当按下它时开始训练模型,当模型完成训练时,它需要显示基于该模型的图表。

如何使用 Class 在 Panel 中构建此类依赖项?

下面的例子展示了按下按钮时如何触发 'button',后者触发方法 train_model(),完成后触发方法 update_graph()。
关键在于lambda x: x.param.trigger('button')@param.depends('button', watch =真):

import numpy as np
import pandas as pd
import holoviews as hv
import param
import panel as pn
hv.extension('bokeh')

class ActionExample(param.Parameterized):

    # create a button that when pushed triggers 'button'
    button = param.Action(lambda x: x.param.trigger('button'), label='Start training model!')

    model_trained = None

    # method keeps on watching whether button is triggered
    @param.depends('button', watch=True)
    def train_model(self):
        self.model_df = pd.DataFrame(np.random.normal(size=[50, 2]), columns=['col1', 'col2'])
        self.model_trained = True

    # method is watching whether model_trained is updated
    @param.depends('model_trained', watch=True)
    def update_graph(self):
        if self.model_trained:
            return hv.Points(self.model_df)
        else:
            return "Model not trained yet"

action_example = ActionExample()

pn.Row(action_example.param, action_example.update_graph)

关于操作按钮的有用文档:
https://panel.pyviz.org/gallery/param/action_button.html#gallery-action-button

Action 参数的其他有用示例:
https://github.com/pyviz/panel/issues/239

按下按钮之前:


按下按钮后: