Panel + Param:FileInput 小部件和@param.depends 交互
Panel + Param: FileInput widget and @param.depends interaction
我似乎无法弄清楚在参数化 class 中使用 FileInput 小部件触发函数的语法 class。
我知道 FileInput 本身不是参数,但我查看了它的代码,发现值属性是通用的 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
感谢任何意见或任何人都可以指出适当的文档。谢谢!
你是对的,在这种情况下你的'file'变量需要是一个参数,而不是面板小部件。
用于设置可用参数的所有可能选项都在这里:
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 是一个可以自己输入文件名的框。这个问题与此相关并给出了更多解释:
所以你需要将这个 FileSelector 仍然更改为 FileInput 小部件,通过这样覆盖它:
pn.Param(
my_file.param['file'],
widgets={'file': pn.widgets.FileInput}
)
请注意,我还添加了 watch=True。当您的 'file' 参数发生变化时,这可以确保更改被拾取。在以下问题中对此有更多解释:
你能告诉我这是否有帮助吗?
我似乎无法弄清楚在参数化 class 中使用 FileInput 小部件触发函数的语法 class。
我知道 FileInput 本身不是参数,但我查看了它的代码,发现值属性是通用的 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
感谢任何意见或任何人都可以指出适当的文档。谢谢!
你是对的,在这种情况下你的'file'变量需要是一个参数,而不是面板小部件。
用于设置可用参数的所有可能选项都在这里:
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 是一个可以自己输入文件名的框。这个问题与此相关并给出了更多解释:
所以你需要将这个 FileSelector 仍然更改为 FileInput 小部件,通过这样覆盖它:
pn.Param(
my_file.param['file'],
widgets={'file': pn.widgets.FileInput}
)
请注意,我还添加了 watch=True。当您的 'file' 参数发生变化时,这可以确保更改被拾取。在以下问题中对此有更多解释:
你能告诉我这是否有帮助吗?