首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >对于pyviz/panel,如何仅在单击按钮时才修改窗格中的值?

对于pyviz/panel,如何仅在单击按钮时才修改窗格中的值?
EN

Stack Overflow用户
提问于 2019-10-28 21:52:05
回答 1查看 1K关注 0票数 2

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

下面是一个最小的工作示例。在这里,我想在每次点击按钮时生成一些随机数,但它似乎什么也不做。

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

代码语言:javascript
复制
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面板,运行在木星6.0.0上。谢谢!

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-10-29 15:13:47

,因为要创建参数化类,所以不能使用pn.widgets()

要选择和生成值的变量和按钮也需要是params。

我已经通过调整了您的示例,将变量‘均’改为param.Integer(),并将‘按钮’更改为param.Action()

有关使用params的更多信息,请参见:https://panel.pyviz.org/user_guide/Param.html

代码语言:javascript
复制
# 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

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/58598868

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档