【Dash搭建可视化网站】项目3:用Dash callback实现交互动态元素

手动反爬虫,禁止转载:原博地址 https://blog.csdn.net/lys_828/article/details/122061934(CSDN博主:Be_melting)

 知识梳理不易,请尊重劳动成果,文章仅发布在CSDN网站上,在其他网站看到该博文均属于未经作者授权的恶意爬取信息

项目3:用Dash callback实现交互动态元素

callback动态交互在官网中(https://dash.plotly.com/basic-callbacks)的示例代码如下,复制粘贴后放在本地运行。

import dash
import dash_core_components as dcc
import dash_html_components as html
from dash.dependencies import Input, Output

app = dash.Dash(__name__)

app.layout = html.Div([
    html.H6("Change the value in the text box to see callbacks in action!"),
    html.Div([
        "Input: ",
        dcc.Input(id='my-input', value='initial value', type='text')
    ]),
    html.Br(),
    html.Div(id='my-output'),
])

@app.callback(
    Output(component_id='my-output', component_property='children'),
    Input(component_id='my-input', component_property='value')
)
def update_output_div(input_value):
    return 'Output: {}'.format(input_value)

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

运行完毕后,刷新网址:http://127.0.0.1:8050/ ,输出结果如下。这部分代码实现的功能就是用户在输入框中输入的内容,在下面的Output部分就会直接输出。对于一些交互式的操作来说,这种设计必不可少。
请添加图片描述

以上代码核心两个部分:①是构建了数据流向;②是构建了数据的处理规则。 数据流向是通过dependencies下的Input和Output进行设计,具体的实现通过id的标识。而数据处理规则就是传入Input里面对应的是value值属性,输出的就是对应children属性,最终传入到update_output_div函数中的input_value参数,函数执行返回最终值。

为了理清这个过程,进行代码的拆解,处理流程如下。

[1] 搭建Dash框架,这一次多导入多个模块,接着添加网页的信息。

import dash
from dash import html
from dash import dcc          # 动态交互的模块
from dash.dependencies import Input,Output  # I/O输入输出控制
 
app = dash.Dash()

app.layout = html.Div(children=[
    html.H6('Change the value in the text box to see callbacks in action!'),
    html.Div([
        'input: ',
        dcc.Input(id='my-input',value='initial value',type='text')
    ]),  						#对应输入的Div,输入的里面有一个提示语和一个输入框
    html.Br(),  				#创建换行
    html.Div(id='my-output') 	#对应输出的Div,输出里面暂时为空
])

xxx 

app.run_server(debug=True)

[2] 解构装饰器内容。装饰器的作用相当于是接受一个函数,然后再返回一个函数,可以理解为函数的工厂制造机。就相当于是有一个机器人是专门制造其它机器人而存在,举个实际工业上的案例:特斯拉汽车工厂,就是汽车机器人造汽车。在上面的xxx位置,添加代码如下。

# 定义造车规则
def rule(input_value):
    return input_value + '🍎'

# 创建一个造车机器人
data_processer = app.callback(
    Output(component_id='my-output',component_property='children'),
    [Input(component_id='my-input',component_property='value')]
)   

# 造车机器人加载规则进行造车
data_processer(rule)

保存文件后运行,刷新网址:http://127.0.0.1:8050/ ,输出结果如下。
请添加图片描述
[3] 官网示例进行解构完成后,尝试自己写一个简单的页面,实现marndown语法转网页html。先补充框架信息,代码如下。

import dash     								#加载dash模块
from dash import html  							#导入python转html模块
from dash import dcc							#导入动态交互组件模块
from dash.dependencies import Input,Output 		#导入I/O输入输出组件模块

app = dash.Dash()     			#创建Dash,进行应用初始化
app.layout = html.Div(xxx)		#设置网页html中的布局

def rule(v):					#设置数据的处理规则
    pass

data_processer = app.callback(xxx)   #设置数据流向

data_processer(relu)				#加载处理规则

app.run_server(debug=True)			#运行Dash应用

[4] 填充框架中剩余内容。首先完善数据流向的问题,实现Markdown网页的制作,首先需要一个输入Markdown语法的框体,然后输出的内容是对应展示的Markdown页面。处理规则这里就直接返回原始数据。

#设置数据的处理规则
def rule(v):					
    return v

# 设置数据流向
data_processer = app.callback(
	Output(component_id='mark',component_property='children'),
    [Input(component_id='text',component_property='value')])   

#加载处理规则
data_processer(relu)				

[5] 创建网页html中的内容实体。有了对应的component_id,就需要有实体来对应id信息。创建文本输入区域框,和生成的Markdown区域,两者都是在dcc模块下面,代码操作如下。

textarea = dcc.Textarea(id='text',style={'width':'100%','height':'10rem'})
markdown = dcc.Markdown(children='',id='mark')

app.layout = html.Div(children=[
    markdown,
    html.H3('输入文字:'),
    html.Hr(),  #水平线绘制
    textarea
])

[6] 全部代码如下,文件保存后运行。

import dash
from dash import html
from dash import dcc
from dash.dependencies import Input,Output

app = dash.Dash()

textarea = dcc.Textarea(id='text',style={'width':'100%','height':'10rem'})
markdown = dcc.Markdown(children='',id='mark')

app.layout = html.Div(children=[
    markdown,
    html.H3('输入文字:'),
    html.Hr(),
    textarea
])

data_processer = app.callback(
    Output(component_id='mark',component_property='children'),
    [Input(component_id='text',component_property='value')]
)

def rule(v):
    return v

data_processer(rule)

app.run_server(debug=True)

刷新网址:http://127.0.0.1:8050/ ,输出结果如下。
请添加图片描述
比如将准备好的一份markdown文件复制到文本区域框中,输出结果如下。(基本上也实现了Markdown网页的效果)
请添加图片描述
至此整个项目3,使用Dash callback实现交互动态元素就介绍完毕。最核心的内容就是如何创建数据流向和数据规则。

  • 0
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

lys_828

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值