面板+参数:FileInput小部件和@ param.depends交互

时间:2019-10-15 18:36:17

标签: python parameters panel pyviz

我似乎无法弄清楚在Parameterized类中使用FileInput小部件对某人触发函数的语法。

我知道FileInput本身不是参数,但是我查看了它的代码,并且value属性是一个通用的param.Parameter,所以我认为这可以工作。我还尝试仅根据文件(MyService)。

<PackageReference Include="AWSSDK.SecretsManager" Version="3.3.101.17" />

然后,在使用文件小部件之后,我希望@param.depends('file')具有与class MyFile(param.Parameterized): file = pn.widgets.FileInput() # should be a param.? file_data = None @param.depends('file.value') def process_file(self): print('processing file') self.file_data = self.file.value my_file = MyFile() 相同的内容。

panel_output

感谢任何输入,或者任何人都可以指出我需要的文档。谢谢!

https://github.com/pyviz/panel/issues/711

1 个答案:

答案 0 :(得分:1)

您是对的,在这种情况下,您的“文件”变量必须是参数,而不是面板小部件。

此处有用于设置可用参数的所有可能选项: https://param.pyviz.org/Reference_Manual/param.html

因此,在您的情况下,我使用了 param.FileSelector()

import param
import panel as pn

pn.extension()    


class MyFile(param.Parameterized):
    file = param.FileSelector()  # changed this into a param
    file_data = None

    @param.depends('file', watch=True)  # removed .value and added watch=True
    def process_file(self):
        print('processing file')
        self.file_data = self.file  # removed .value since this is a param so it's not needed

my_file = MyFile()

但是,此FileSelector是一个用于自己键入文件名的框。这个问题与此相关,并给出了更多的解释:
Get a different (non default) widget when using param in parameterized class (holoviz param panel)
因此,您需要通过覆盖如下内容来将FileSelector仍更改为FileInput小部件: / p>

pn.Param(
    my_file.param['file'], 
    widgets={'file': pn.widgets.FileInput}
)

请注意,我还添加了 watch = True 。当您的“文件”参数发生更改时,这可以确保所做的更改。以下问题对此有更多解释:
How do i automatically update a dropdown selection widget when another selection widget is changed? (Python panel pyviz)

您能告诉我是否有帮助吗?