【Dash】Dash中@callback() 回调函数的Output() 参数

news2024/11/27 18:32:22

一、Dash 中的 @callback()

在Python中,@callback是一个用于注册回调函数的装饰器

Dash 的回调机制允许开发者创建交互式的Web应用,通过回调函数可以实现前端界面与后端逻辑的交互。

二、@callback() 的概念、定义和应用场景

概念

  • @callback 是 Dash 框架中的一个装饰器,用于将一个普通函数转变成一个回调函数,这个函数可以响应 Dash 应用中的用户交互。

定义

  • @callback 常与 Output 和 Input 类一起使用,定义了当输入组件的值发生变化时,哪个前端组件应该更新,以及如何更新。

应用场景

  • 需要根据用户输入、点击等交互更新前端显示的情况时使用。
  • 例如,当用户调整滑块时更新图表,或者在用户输入文本后显示结果。

三、@callback() 中 的常用类

  • Input():用于指定触发回调的组件和属性。例如:Input('component-id', 'property') 表示当指定组件的属性发生变化时,回调函数将被触发。
  • Output():用于指定回调函数的结果将更新到哪个组件的哪个属性。例如:Output('component-id', 'property') 表示回调函数的返回值将用来更新指定组件的属性。
  • State():用于在回调函数中提供额外的输入值,但它本身的变化不会触发回调。这个可以用于传递组件的当前状态,而不需要更新触发回调函数。

四、@callback() 中的 Output() 有哪些参数?

1、'children'

  • 用于更新组件的子元素。这通常用于容器组件,如 html.Div html.Ul,你可以用它来动态添加或修改内部的 HTML 元素。
import dash
from dash import html
from dash.dependencies import Input, Output

app = dash.Dash(__name__)

app.layout = html.Div([
    html.Button('Add Test', id='add-text-button', n_clicks=0),
    html.Div(id='text-container')
])


@app.callback(
    Output('text-container', 'children'),
    [Input('add-text-button', 'n_clicks')]
)
def add_text(n_clicks):
    if n_clicks:
        return [html.P(f'This is text {i}') for i in range(n_clicks)]


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

2、'figure'

  • 用于更新图表组件的内容,如 dcc.Graph。这个属性允许你传递图表的数据和配置,Dash 会自动更新图表的显示。
import dash
from dash import dcc, html
from dash.dependencies import Input, Output
import plotly.express as px

app = dash.Dash(__name__)

# 定义应用布局
app.layout = html.Div([
    # 添加 dcc.Location 组件来捕获 URL 的路径
    dcc.Location(id='url', refresh=False),
    # 定义一个 Graph 组件来显示图表
    dcc.Graph(id='example-graph')
])


# 回调函数,根据 URL 路径更新图表
@app.callback(
    Output('example-graph', 'figure'),
    [Input('url', 'pathname')]
)
def update_graph(pathname):
    # 获取鸢尾花数据集
    df = px.data.iris()

    # 根据 pathname 来决定图表的数据和类型
    if pathname:
        # 假设 pathname 是 'sepal_length', 'sepal_widdth', 'petal_length', 'petal_width' 中的一个
        # 去除 pathname 前后的斜杠
        column_name = pathname.strip('/')
        if column_name in df.columns:
            fig = px.box(df, y=column_name)
            return fig
    # 如果 pathname 不匹配任何列,返回一个空的图表
    column_list = 'url可拼接:' + ','.join(df.columns)
    return {'data': [],
            'layout': {'title': f'No Data<br>{column_list}'}}        # 返回空图表


# 运行服务器
if __name__ == '__main__':
    app.run_server(debug=True)

3、'style'

  • 用于更新组件的 CSS 样式。你可以指定样式字典来改变组件的外观。
import dash
from dash import html
from dash.dependencies import Input, Output

app = dash.Dash(__name__)

app.layout = html.Button('Change Style', id='change-style-button', n_clicks=0)


@app.callback(
    Output('change-style-button', 'style'),
    [Input('change-style-button', 'n_clicks')]
)
def change_style(n_clicks):
    if n_clicks % 2 == 1:
        return {'color': 'white', 'background-color': 'blue'}
    else:
        return {'color': 'black', 'background-color': 'lightgray'}


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

4、'className'

  • 用于更新组件的 CSS 类名。这可以用于应用预定义的 CSS 样式或 JavaScript 插件。
import dash
from dash import html
from dash.dependencies import Input, Output

app = dash.Dash(__name__)

app.layout = html.Div([
    html.Button('Change Class', id='change-class-button', n_clicks=0),
    html.Div('Content', id='content-div'),
    html.Div(id='class-name-display')
])


@app.callback(
    Output('content-div', 'className'),
    [Input('change-class-button', 'n_clicks')]
)
def change_class(n_clicks):
    if n_clicks % 2 == 0:
        return 'new-class-a'
    else:
        return 'new-class-b'


@app.callback(
    Output('class-name-display', 'children'),
    [Input('content-div', 'className')]
)
def display_class_name(className):
    return f'The current class name is: {className}'


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

 

5、'value'

  • 用于更新输入组件的值,如 dcc.Input dcc.Dropdown
import dash
from dash import dcc, html
from dash.dependencies import Input, Output


app = dash.Dash(__name__)

app.layout = html.Div([
    dcc.Location(id='url', refresh=False),
    dcc.Input(id='input-field', value='Initial Value')
])


@app.callback(
    Output('input-field', 'value'),
    [Input('url', 'pathname')]
)
def update_input_value(pathname):
    return pathname if pathname else 'No Path Provided'


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

 

6、'options'

  • 用于更新下拉列表组件的选项,如 dcc.Dropdown
import dash
from dash import dcc, html
from dash.dependencies import Input, Output

app = dash.Dash(__name__)

app.layout = html.Div([
    dcc.Location(id='url', refresh=False),
    dcc.Dropdown(id='my-dropdown')
])


@app.callback(
    Output('my-dropdown', 'options'),
    [Input('url', 'pathname')]
)
def update_dropdown_options(pathname):
    if pathname:
        options = [{'label': f'Option {i}', 'value': f'{i}'} for i in range(1,6)]
        return options


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

 

7、'active'

  • 用于更新选项卡或手风琴组件的当前活动项,如 dcc.Tabs dcc.Accordion

8、'selectedData'

  • 用于更新图表组件选中的数据点,如 dcc.Graph

9、'src'

  • 用于更新图片或视频组件的源,如 html.Img html.Video

10、'data'

  • 用于更新图表或数据表组件的数据,如 dcc.Graph dash_table.DataTable

11、'columns'

  • 用于更新数据表组件的列配置,如 dash_table.DataTable

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2060578.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

视觉表征学习中的世界模型:自监督方法的新篇章

人工智能咨询培训老师叶梓 转载标明出处 计算机视觉中&#xff0c;表征学习是一个核心问题。如何让机器像人类一样理解图像内容&#xff0c;是实现高级视觉任务的关键。传统的自监督学习方法往往依赖于数据的变换来预测其变化&#xff0c;例如遮蔽图像建模&#xff08;Masked …

SpringBoot:将单体项目拆分成微服务项目

&#x1f4a5; 该系列属于【SpringBoot基础】专栏&#xff0c;如您需查看其他SpringBoot相关文章&#xff0c;请您点击左边的连接 目录 一、项目准备 二、拆分商品服务和购物车服务 1. 商品服务 &#xff08;1&#xff09;创建模块 &#xff08;2&#xff09;填写依赖 &a…

数学生物学-1-指数增长与衰退(Exponential Growth and Decay)

我们注意到数学专业的学生往往没有生物学系统的思维&#xff0c;而生物专业的学生则常常对数学感到恐惧。许多生物专业的学生可能一直对科学感兴趣&#xff0c;部分原因是他们认为生物学是一个不需要任何数学技能或背景就可以研究的科学领域。我认为这是不对的思维。 虽然大多…

Fortify相比其他扫描工具的优势在哪里?

最新发布的 Fortify 22.1.0 版本&#xff0c;不仅能高度兼容最新的软件技术&#xff0c;同时继续保持对运营环境常见的应用安全用例的广泛兼容性。经过强化的 Fortify 进一步提升了性能、准确性、可扩展性和易用性。 无论是运行 DevSecOps、开展云计算转型&#xff0c;还是确保…

Mac移动硬盘选什么格式最好 Mac怎么用ntfs移动硬盘

在使用Mac电脑的过程中&#xff0c;很多用户可能有需要扩展存储空间的需求。选择合适的移动硬盘格式对于数据传输的效率和兼容性至关重要。本文将详细介绍Mac移动硬盘选什么格式好&#xff0c;以及Mac怎么用ntfs移动硬盘&#xff0c;帮助用户优化Mac的使用体验。 一、Mac移动硬…

【具体数学 Concrete Mathematics】1.1.2 平面上的直线

【具体数学 Concrete Mathematics】1.1.2 平面上的直线

仿照ContentLoadingProgressBar 的特点在Android项目中自定义Loading对话框

ContentLoadingProgressBar 是 Android 中的一个控件&#xff0c;继承自 ProgressBar。它在 ProgressBar 的基础上添加了一些特殊功能&#xff0c;主要用于在加载内容时显示进度。它的一些主要特点如下&#xff1a; 自动隐藏和显示&#xff1a;ContentLoadingProgressBar 会在…

引发C++程序内存泄漏的常见原因分析与排查方法总结

目录 1、概述 2、内存泄漏与程序的位数 3、调用哪些接口去动态申请内存&#xff1f; 4、引发内存泄漏的常见原因总结 4.1、通过malloc/new等动态申请的内存&#xff0c;在使用完后&#xff0c;没有调用free/delete去释放&#xff08;也可能是调用了上面讲到的HeapAlloc或V…

计算机专业大四毕业生如何在一天内完成开题报告?一招教你解锁开题报告写作技巧

&#x1f495;&#x1f495;作者&#xff1a;计算机源码社 &#x1f495;&#x1f495;个人简介&#xff1a;本人 八年开发经验&#xff0c;擅长Java、Python、PHP、.NET、Node.js、Android、微信小程序、爬虫、大数据、机器学习等&#xff0c;大家有这一块的问题可以一起交流&…

SQL Server数据库 创建表,和表的增删改查

打开SQL Server工具,连接服务器 右击数据库&#xff0c;创建新的数据库 新建表 填写列&#xff0c;我添加了Id,Name,Sex,Age,和class列 右键表刷新一下就有了 我又同时创建了一个Class表 点击新建查询&#xff0c;现在写代码添加数据&#xff0c;也可以操作表来对数据进行添加 …

GEC6818开发板显示BMP格式图片

1、BMP格式图片 bmp格式图片是没有经过任何压缩过的图片,缺点是为文件尺寸比较大,不适合传播;优点是文件必须要解码器可以读出来直接使用。 虽然BMP格式文件内部存储的就是RGB数据,无需任何解码,但毕竟RGB数据是纯数据,没有任何图片尺寸、色深等具体信息,因此我们需要了…

滴滴二季度GTV达963亿元 经调整EBITA盈利13亿元

8月21日&#xff0c;滴滴在其官网发布2024年二季度业绩报告。 二季度&#xff0c;包括中国出行和国际业务在内的核心平台交易量为38.75亿单&#xff0c;较去年同期增长17.4%。其中&#xff0c;中国出行总单量为30.04亿单&#xff0c;较去年同期增长12.3%&#xff1b;国际业务总…

python爬虫--pyquery解析库整理

前言 欢迎来到我的博客 个人主页:北岭敲键盘的荒漠猫-CSDN博客 本文整理python的爬虫解析库pyquery的语法 简洁快速的整理&#xff0c;建议有前端基础的人看 pyquery解析原理 pyquery的原理就是拿到网站的前端源码后&#xff0c;我们根据我们需求信息所在的标签进行筛选。 选…

C语言第15篇

1.阅读下面的程序 #include<stdio.h> void main() { int i,j; i010; j9; printf("%d,%d",i-j,ij); } 则程序的运行结果是________. A) 1,19 B) -1,19 C) 1,17 D) -1,17 提示&#xff1a;八进制 2.以下程序段__________. x-1; do { xx*…

Aria2安装和使用-Mac版

起因是需要网盘下载&#xff0c;无奈限速很烦&#xff0c;查找很多方案后&#xff0c;最终决定使用Aria2 Tampermonkey。 其中Aria2是一款开源轻量的下载软件&#xff0c;简单来说就是可以通过URL直接下载。 Tampermonkey则是一款插件&#xff0c;我这里是.crx结尾的谷歌插件…

WPF调用CEF插件运行时启动CefSharp.BrowserSubprocess.exe三个进程

cefsharp.browsersubprocess.exe 是CefSharp&#xff08;一个基于Chromium的开源浏览器控件&#xff09;的一部分。这个可执行文件通常在以下情况下启动&#xff1a; 渲染进程&#xff1a;CefSharp使用多进程架构&#xff0c;类似于Chrome浏览器。cefsharp.browsersubprocess.e…

【网络】HTTPS——HTTP的安全版本

1.HTTP的问题 1、使用明文通信 HTTP协议不具备给通讯内容加密的功能&#xff0c;所有使用HTTP协议通信的请求和响应的内容无法进行加密,都是使用明文发送。由于HTTP属于TCP/IP协议族的协议&#xff0c;按照TCP/IP协议族的通讯机制&#xff0c;HTTP在整个通讯线路上都存在被窃听…

商务场合的白酒艺术,助你轻松搭建人脉

在繁忙的商务世界中&#xff0c;每一次会面都可能是开启新机遇的钥匙。而在这些重要的场合中&#xff0c;白酒不仅仅是一种饮品&#xff0c;更是一种文化的载体、一种沟通的桥梁。今天&#xff0c;就让我们一起探讨如何在商务场合中&#xff0c;通过豪迈白酒&#xff08;HOMANL…

深度好文:从《黑神话:悟空》看未来游戏趋势:高互动性、个性化与全球化

引言 在数字时代的浪潮中&#xff0c;游戏产业以其独特的魅力和无限的可能性&#xff0c;成为了全球娱乐文化的重要组成部分。随着科技的飞速发展&#xff0c;特别是高性能计算和人工智能技术的突破&#xff0c;游戏的世界变得越来越真实、细腻且富有深度。而在这股技术洪流中…

从0-1建一个webpack/vue项目,熟悉一下webpack知识点

以下配置项部分优化来自于国内直连GPT/Claude 第一步 首先整个新文件夹&#xff0c;打开终端&#xff0c;然后创建一个新目录&#xff0c;或者直接在vscode里面建个新文件夹&#xff0c;并进入该目录&#xff1b; mkdir my-vue-webpack-project第二步 进入当前目录 cd my-v…