python - 使用 pyviz/panel,如何仅在单击按钮时修改 Pane 中的值?

标签 python pyviz holoviz

我想使用pyviz/panel制作一个仪表板,以便在小部件的值更改后它不会立即刷新。相反,我希望它等待按钮单击,然后相应地更改仪表板中的值。

一个最小的工作示例如下。在这里,我想在每次单击按钮时生成一些随机数,但它似乎没有执行任何操作。

在我的实际任务中,我会根据输入小部件访问数据库以获取几行数据。我想它也可以以同样的方式工作?

import numpy as np
import pandas as pd

import param

import panel as pn
pn.extension()

class UserDash(param.Parameterized):
    mean = pn.widgets.IntSlider(value=10, start=0, end=100)
    output_pane = pn.widgets.TextInput(value='Ready')
    button = pn.widgets.Button(name='Generate', button_type='primary')
    button.on_click(output_pane)

    @param.depends('button')
    def output_pane(self):
        print(self.mean.value)
        df = pd.DataFrame({'x': np.random.normal(int(self.mean.value), 1, 5)}, index=range(5))
        return df

    def panel(self):
        return pn.Column(self.mean, self.button, self.output_pane)

dash = UserDash()
dash.panel().servable()

我使用的是面板 0.6.0,在 Jupyter 6.0.0 上运行。谢谢!

最佳答案

由于您正在创建参数化类,因此无法使用 pn.widgets()
用于选择和生成值的变量和按钮也需要是参数。
我通过将变量“mean”更改为 param.Integer() 并将“button”更改为 param.Action() 来调整您的示例。

有关使用参数的更多信息可以在这里找到:https://panel.pyviz.org/user_guide/Param.html

# import libraries
import numpy as np
import pandas as pd
import param
import panel as pn
pn.extension()

# instead of pn.widgets I'm using param.Integer() and param.Action() to create your variables
class UserDash(param.Parameterized):
    mean = param.Integer(default=10, bounds=(0, 100))
    button = param.Action(lambda x: x.param.trigger('button'), label='Generate')

    @param.depends('button')
    def output_pane(self):
        return pd.DataFrame({'x': np.random.normal(int(self.mean), 1, 5)}, index=range(5))

    def panel(self):
        return pn.Column(
            self.param['mean'], 
            self.param['button'], 
            self.output_pane
        )

# create instance of dashboard
dash = UserDash()
dash.panel().servable()

我认为以下有关按钮使用的问题/答案在这里也很有帮助:
https://stackoverflow.com/questions/57970603/use-button-to-trigger-action-in-panel-with-parameterized-class-and-when-button-a

关于python - 使用 pyviz/panel,如何仅在单击按钮时修改 Pane 中的值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58598868/

相关文章:

python - 比较相同索引python中列表中的项目

python - 你知道一个很棒的用于操作日期的 Python 库吗?

python - 如何在Panel应用程序中实现身份验证

python - 如何在 hvPlot 图中禁用科学记数法?

python - 滤波器设计以寻找特定音频频率的能量

python - 变量变化时的 Panel/Hvplot 交互

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

python - 将一个特定的数据点标记添加到箱线图或 fiddle 图中(使用 holoviews/hvplot)

python - 在 hvplot 中自定义标记列表

python - 使用自定义证书文件在代理后面进行 Pip