Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/image-processing/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 使用pyviz/panel,如何仅在单击按钮时修改窗格中的值?_Python_Pyviz_Holoviz - Fatal编程技术网

Python 使用pyviz/panel,如何仅在单击按钮时修改窗格中的值?

Python 使用pyviz/panel,如何仅在单击按钮时修改窗格中的值?,python,pyviz,holoviz,Python,Pyviz,Holoviz,我想用pyviz/panel制作一个仪表板,这样它就不会在小部件的值更改时立即刷新。相反,我希望它等待按钮单击,然后才相应地更改仪表板中的值 下面是一个简单的工作示例。在这里,我想在每次单击按钮时生成一些随机数,但它似乎没有任何作用 在我的实际任务中,我会根据输入小部件点击数据库获取几行数据。我想它可以用同样的方式工作 import numpy as np import pandas as pd import param import panel as pn pn.extension()

我想用
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()

我使用的是panel 0.6.0,运行在Jupyter 6.0.0上。谢谢

因为您正在创建一个参数化类,所以不能使用pn.widgets()
选择和生成值的变量和按钮也需要是参数
我调整了您的示例,将变量“mean”更改为param.Integer(),将“button”更改为param.Action()

有关使用参数的更多信息,请参见:

以下关于按钮使用的问题/答案在这里也很有用:

也许这个问题/答案有助于指出正确的方向:
# 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()