用于简化绘图应用程序构建的库

simpledash的Python项目详细描述


简单短划线Build Status

Simple Dash是一个库,它允许您直接将数据附加到布局并在后台创建所有必需的回调函数,从而简化了使用Plotly Dash构建应用程序的过程。在

安装

pip install simpledash

教程

最简单的例子-在布局中使用输入对象

让我们创建一个带有单个Input组件的应用程序,它将呈现用户输入的任何内容。在

^{pr2}$

如您所见,没有显式定义回调,代码简洁明了。在

怎么了?setup_callbacks方法扫描了应用程序的布局,找到了所有出现的dash.dependencies.Input,并为它们创建了回调函数。在

更复杂的示例-带有data_provider修饰符

的数据函数

我们希望有两个输入(命名为A和B),并让用户决定将使用哪一个 用于渲染输出值。此选择将通过下拉菜单完成。在

importdash_core_componentsasdccfromdash.dependenciesimportInputfromsimpledash.data.data_providersimportdata_providerinput_a=dcc.Input(id='data-input-a',value="")input_b=dcc.Input(id='data-input-b',value="")input_chooser=dcc.Dropdown(id='input-chooser',options=options_from(['A','B']))# use a `data_provider` annotation to indicate, that the method provides data based on inputs# inputs used by function are declared as arguments to the decorator# and are later on passed to the function as arguments@data_provider(Input('data-input-a','value'),Input('data-input-b','value'),Input('input-chooser','value'))defoutput_value(input_a_value,input_b_value,input_chooser_value):ifinput_chooser_value=="A":returninput_a_valueifinput_chooser_value=="B":returninput_b_valuereturn""app.layout=html.Div([html.Div(["A: ",input_a],className='row'),html.Div(["B: ",input_b],className='row'),html.Div(["Which one to show? ",input_chooser],className='row'),html.Br(),# you simply use `data_provider` instance in the layout (as in previous example)html.Div(["Here's the output: ",output_value],className='row',id='output'),# but you can also run some simple operations on `data_provider`, like `upper()`html.Div(["Also in uppercase!: ",output_value.upper()],className='row',id='output-upper')])setup_callbacks(app)

这次我们使用了data_providerdecorator来声明能够基于输入提供数据的函数。请注意,这是一个普通的python函数,因此您应该能够对输入执行任何操作,而不管其复杂性如何。在

我们在示例中看到的有趣的事情是output_value.upper()。这只是个语法糖 这个简单的破折号让你不用再写一个data_provider来写大写字母, {{cd8>我们可以直接调用这个方法。在

请注意,您可以对data_provider实例执行的操作集限于:

  • 访问属性(output_value.xyz
  • 按索引访问项(output_value['xyz']
  • 调用方法(output_value.xyz("param")

嵌套data_providers

假设您想复制前面示例中的output_value.upper()行为,但是没有语法糖,即直接定义新的data_provider。在

第一个选项是创建一个data_provider,它接受与output_value相同的输入,并将这些输入的值传递给output_value。下面是它的样子:

@data_provider(Input('data-input-a','value'),Input('data-input-b','value'),Input('input-chooser','value'))defuppercase_output_value_1(input_a_value,input_b_value,input_chooser_value):v=output_value(input_a_value,input_b_value,input_chooser_value)returnv.upper()

第二个选项的样板文件要少得多,因为整个data_provider被指定为输入:

@data_provider(output_value)defuppercase_output_value_2(v):returnv.upper()

下一步是什么?

要查看更高级的示例,请转到回购的examples部分。在

常见问题解答

是否存在没有输入的data_provider的用法?

当您有一个静态值时,使用data_provider不带输入,但是计算数据非常耗时。data_provider将确保惰性,即只有当使用函数的组件显示给用户时,才会调用该函数。在

简单短划线和普通短划线的性能如何?

到目前为止,性能还不是最重要的,所以可以合理地预期简单的破折号要慢一些。也就是说,还有改进的余地(例如缓存data_provider的输出),我们希望在以后的版本中解决这个问题。在

与普通破折号相比有哪些限制?

验证器喜欢在data_providers上失败,因此在许多情况下,您需要停止使用它们。在

举个例子-这行不通:

dcc.Graph(figure={'data':[graph_objects.Scattermapbox(lat=some_data_provider,...)]})

但这将:

dcc.Graph(figure={'data':[dict(lat=some_data_provider,...)]})

我能测试一下吗?

当然。任何适用于普通仪表板应用程序的测试方法也将适用于这种方法。在

测试数据提供程序也很容易——它们的行为就像一个方法,所以可以在测试代码中调用它们。在

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
java语义理解递归反向字符串返回语句   java toString()方法打印空值   java大型IN子句   如何使用JavaSpring在JavaScriptjQuery中设置post路径   java ByteArrayOutputStream已上载到服务器   java为什么轮询在SocketIO上获取数据“无法加载请求的项”?   java源代码应该以UTF8格式保存   Java数据库轮询器?   在Java中将double转换为float   java AccessDeniedException:C:\Windows\System32\drivers\etc\hosts