You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多
文档控制台
免费开始使用

基于Plotly Dash构建可复用卡片式Grid仪表盘组件求助

用Dash构建可复用文本卡片Grid仪表盘的思路与示例

嘿,刚好我之前做过类似的需求,来给你分享下可行的方案~

现成组件推荐

其实不用从零造轮子,dash-bootstrap-components(DBC) 里的Card组件完全能满足你的需求!它自带了CardHeaderCardBody等子组件,刚好对应你要的标题、数值、描述结构,而且自带美观的默认样式,还能轻松自定义。如果不想用第三方组件,也可以用Dash原生的html.Div自己封装,但DBC能省不少样式调试的功夫。

基础实现思路

  1. 封装可复用Tile组件:写一个函数,接收titlevaluedescription三个参数,返回一个组装好的卡片结构
  2. Grid布局排列:用DBC的RowCol(或者CSS Grid)来实现卡片的网格排列,支持响应式适配不同屏幕
  3. 样式优化:给卡片加阴影、圆角、内边距,让视觉效果更贴近你要的仪表盘风格

完整代码示例

import dash
from dash import html
import dash_bootstrap_components as dbc

# 封装可复用的Tile组件
def create_stat_tile(title, value, description):
    return dbc.Card(
        [
            dbc.CardHeader(title, className="bg-light text-dark fw-bold"),
            dbc.CardBody(
                [
                    html.H3(value, className="text-primary mb-2"),
                    html.P(description, className="text-muted")
                ]
            )
        ],
        className="shadow-sm rounded border-0",
        style={"height": "100%"}  # 让同列卡片高度一致
    )

# 初始化Dash app
app = dash.Dash(__name__, external_stylesheets=[dbc.themes.BOOTSTRAP])

# 构建仪表盘布局
app.layout = dbc.Container(
    [
        html.H1("数据仪表盘", className="my-4"),
        dbc.Row(
            [
                dbc.Col(create_stat_tile("今日访问量", "12,345", "较昨日增长15%"), md=4, className="mb-4"),
                dbc.Col(create_stat_tile("活跃用户数", "4,567", "近7日平均增长8%"), md=4, className="mb-4"),
                dbc.Col(create_stat_tile("转化率", "23.5%", "较上月提升2.1个百分点"), md=4, className="mb-4"),
                dbc.Col(create_stat_tile("总销售额", "$98,765", "本月目标$120,000"), md=6, className="mb-4"),
                dbc.Col(create_stat_tile("订单完成率", "97.2%", "行业平均92%"), md=6, className="mb-4")
            ]
        )
    ],
    fluid=True
)

if __name__ == "__main__":
    app.run_server(debug=True)

额外优化建议

  • 动态数据支持:可以把value参数换成Dash的dcc.Store或者回调函数,实现数据实时更新
  • 自定义样式:通过修改className或者style参数,调整卡片的颜色、字体、间距等,比如给不同类型的卡片加不同的主题色
  • 响应式适配:利用DBC的mdsmlg等参数,让卡片在手机、平板、桌面端自动调整排列数量

内容的提问来源于stack exchange,提问作者jack87

火山引擎 最新活动