【问题标题】:Panel + Param: FileInput widget and @param.depends interactionPanel + Param:FileInput 小部件和@param.depends 交互
【发布时间】:2019-10-15 18:36:17
【问题描述】:

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

我知道 FileInput 本身并不是一个参数,但我查看了它的代码,并且 value 属性是一个通用的 param.Parameter,所以我认为这会起作用。我也尝试过仅依赖于文件 (@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()

然后在使用文件小部件后,我希望my_file.file_data 具有与self.file.value 相同的内容。

panel_output

感谢任何输入,或者如果有人可以将我指向适当的文档。谢谢!

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

【问题讨论】:

    标签: python parameters pyviz panel-pyviz


    【解决方案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 小部件,方法是像这样覆盖它:

    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)

    如果这有帮助,您能告诉我吗?

    【讨论】:

    • 我有完全相同的问题,这完美地回答了它。我不知道在最后一个代码框中使用 pn.Param 进行更改。
    猜你喜欢
    • 2011-09-08
    • 2016-12-18
    • 2021-04-21
    • 2019-03-29
    • 2013-10-21
    • 1970-01-01
    • 1970-01-01
    • 2017-01-13
    • 2016-06-29
    相关资源
    最近更新 更多