python - Python Dash - 可以循环创建 dbc.Row 吗?
问题描述
我有以下代码创建 5 行:
dbc.Row(
dcc.Checklist(
id='cl1',
options=[{'label': x, 'value': x} for x in ['World', 'AE', 'EME']],
value= ['World'],
labelStyle={'display': 'inline-block'},
),
align='center',
style={'text-align': 'center', 'padding-bottom': '8pt'}
),
dbc.Row(
dcc.Checklist(
id='cl2',
options=[{'label': x, 'value': x} for x in ['USA', 'CAN', 'DEU', 'FRA', 'ITA', 'ESP', 'GBR']],
value= [],
labelStyle={'display': 'inline-block'},
),
align='center',
style={'text-align': 'center', 'padding-bottom': '8pt'}
),
dbc.Row(
dcc.Checklist(
id='cl3',
options=[{'label': x, 'value': x} for x in ['JPN', 'SGP', 'HKG', 'TWN', 'KOR']],
value=[],
labelStyle={'display': 'inline-block'},
),
align='center',
style={'text-align': 'center', 'padding-bottom': '8pt'}
),
dbc.Row(
dcc.Checklist(
id='cl4',
options=[{'label': x, 'value': x} for x in ['MYS', 'THA', 'PHL', 'IDN', 'VNM']],
value=[],
labelStyle={'display': 'inline-block'},
),
align='center',
style={'text-align': 'center', 'padding-bottom': '8pt'}
),
dbc.Row(
dcc.Checklist(
id='cl5',
options=[{'label': x, 'value': x} for x in ['IND', 'BRA', 'RUS', 'MEX', 'ZAF']],
value=[],
labelStyle={'display': 'inline-block'},
),
align='center',
style={'text-align': 'center', 'padding-bottom': '5vh'}
),
如您所见,行之间的唯一区别是它们的 id 和它们引用的列表。
为了提高效率,我想知道是否有办法在循环中创建这些行?像这样的东西:
for name, list in zip(names, lists):
dbc.Row(
dcc.Checklist(
id=name,
options=[{'label': x, 'value': x} for x in list],
value= ['World'],
labelStyle={'display': 'inline-block'},
),
align='center',
style={'text-align': 'center', 'padding-bottom': '8pt'}
),
以上只是抛出一个语法错误。
解决方案
诀窍是在循环中创建清单:
cl = {}
cl_options = [['World', 'AE', 'EME'],
['USA', 'CAN', 'DEU', 'FRA', 'ITA', 'ESP', 'GBR'],
['JPN', 'SGP', 'HKG', 'TWN', 'KOR'],
['MYS', 'THA', 'PHL', 'IDN', 'VNM'],
['IND', 'BRA', 'RUS', 'MEX', 'ZAF']]
for i in range(1,6):
cl['cl{0}'.format(i)] = dcc.Checklist(
id='cl{0}'.format(i),
options=[{'label': x, 'value': x} for x in cl_options[i-1]],
value=[],
labelStyle={'display': 'inline-block'},
),
然后您可以简单地执行此操作以轻松初始化行:
dbc.Row(dbc.Col(cl['cl1'], style={'text-align': 'center'})),
dbc.Row(dbc.Col(cl['cl2'], style={'text-align': 'center'})),
dbc.Row(dbc.Col(cl['cl3'], style={'text-align': 'center'})),
dbc.Row(dbc.Col(cl['cl4'], style={'text-align': 'center'})),
dbc.Row(dbc.Col(cl['cl5'], style={'text-align': 'center'})),
理论上,您也可以在循环中创建行对象,但我发现以这种方式自定义样式更灵活。
推荐阅读
- c++ - Makefile for minimizing steps when changing files
- sql - DateDiff By Day of Week Count Does Not Match Actual Count from Paper Calendar
- html - How do I keep objects in sections centered when the browser is resized?
- javascript - 使用在 Node.js 上运行的 MySQL2 执行查询时出现 ERR_STREAM_WRITE_AFTER_END
- mysql - 为多个用户对 MySQL 进行排名
- excel - 当有更多数据时,使用 vba 在 excel 中创建数据透视失败
- java - 寻找字符串中不重复的第一个字符
- sql - 如何在 MariaDB 中的 If 语句之后回滚事务
- spring - 数据库连接边界与事务边界
- jquery - 根据页面顶部的当前 div 分配类