python 动态 仪表_仪表板动态滑块

博客讲述了在 Dash 应用中遇到的问题,即使用下拉菜单切换滑块时,滑块的值无法正确保存。作者希望在选择 A 或 B 后,对应的滑块调整值能在切换回之前的状态。目前的实现会导致在切换回 A 后,A 的滑块重置。作者尝试了两种方法,但遇到了回调函数和循环依赖的问题。博客探讨了解决这个问题的策略,特别是如何在不触发循环依赖的情况下保存滑块的状态。
摘要由CSDN通过智能技术生成

剥离问题:

我想有一个下拉式索引滑块。在下拉列表中,我有a,B,这将导致要么是一个调整a值的滑块,要么是一个调整B值的滑块。在任何时候,我都希望有一个显示a和B值的条形图

下面的代码除了一个问题外,都能做到这一点:如果我将A的值从默认值调整为B,将下拉列表切换回B,然后再将其切换回A,A将重置回其默认值。在import dash

import dash_core_components as dcc

import dash_html_components as html

from dash.dependencies import Input, Output, State

app = dash.Dash(__name__)

app.layout = html.Div([

dcc.Dropdown(id='segselect', options = [{'label': 'A', 'value': 'A'},

{'label': 'B', 'value': 'B'}]),

html.Div(id='SliderAContainer'),

html.Div(id='SliderBContainer'),

dcc.Graph(id='plot_graph')

])

app.config['suppress_callback_exceptions']=True

@app.callback(Output('SliderAContainer', 'children'),

[Input('segselect', 'value')])

def return_containerA(seg):

if seg == 'A':

return html.Div(dcc.Slider(id='A', min = 0, max = 10, step = 1))

else:

return html.Div(dcc.Slider(id='A', min = 0, max = 10, step = 1), style={'display': 'none'})

@app.callback(Output('SliderBContainer', 'children'),

[Input('segselect', 'value')])

def return_containerB(seg):

if seg == 'B':

return html.Div(dcc.Slider(id='B', min = 0, max = 10, step = 1, value = 2))

else:

return html.Div(dcc.Slider(id='B', min = 0, max = 10, step = 1, value = 2), style={'display': 'none'})

@app.callback(

Output('plot_graph', 'figure'),

[Input('A', 'value'), Input('B', 'value')])

def plot_A(A, B):

return {

'data': [

{'y': [A, B], 'type': 'bar'},

],

}

if __name__ == '__main__':

app.run_server(debug=True, port=8041, dev_tools_hot_reload=False)

我怎样才能使A在切换菜单到B并返回后不会重置,而不会触发循环依赖?在

原件:

设置有点复杂,让我们看一个例子。在

假设我在模拟税单。我有一个公民数据库,上面列出了他们的状态、婚姻状况和收入。在

我想创建一个滑块,允许我根据婚姻状况和州调整税率,然后计算平均税单。在

屏幕上的滑块太多了,所以我设置了一个下拉菜单,让我们决定按州或婚姻状况进行调整,然后设置第二个下拉菜单,让我们选择特定的状态或特定的婚姻状态。因此有两个下拉列表:选择(状态或婚姻状态)

选择一个特定的选项,例如德克萨斯州或已婚(动态响应第一个下拉列表)

在选择了这两个下拉列表后,我想在屏幕上放置一个滑块来调整该州或婚姻状况的税率。在

滑块就是我卡住的地方。我需要他们提供三个特别的功能:如果我们调整一个州的税率,比如说佛罗里达州+5%,然后针对某个特定的婚姻状况,比如已婚,调整+4%,那么我希望已婚的佛罗里达人的税率增加9%。这意味着我需要存储佛罗里达州的税率,即使动态生成的佛罗里达州滑块不在屏幕上。在

如果我设置佛罗里达州的税率,然后从佛罗里达州切换下拉列表,然后回来,那么我希望滑块是在佛罗里达州选定的税率。在

我希望婚姻状况的选项和状态的选项可以从上传的数据库中动态生成。在

到目前为止,我已经尝试了两种方法。在

方法1:创建一个滑块的规则——每个州一个,婚姻状况一个——把所有的都放在布局中,但是除了下拉列表选择的那个之外,所有的都不可见。这个中断是因为我需要计算平均税单,然后创建一个回调函数,它将所有可能的加息作为输入。但是,只有当所有函数都呈现时,中断和函数才有效。在

方法2:创建税率的dict,只需一个带有动态名称的滑块。然后我可以创建一个所有状态和婚姻状态的动态dict,它根据选定的下拉列表和滑块进行更新。但是,为了更新而不删除以前选择的值,这个动态dict需要通过一个回调来创建,它将自身作为一个状态,而Dash不允许循环依赖,即使是对于state!在

我很乐意发布代码,但这将是超长的,所以我选择描述我在上面尝试过的方法。在

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值