本文示例代码已上传至我的Github仓库https://github.com/CNFeffery/DataScienceStudyNotes

1 简介

   这是我的系列教程Python+Dash快速web应用开发的第八期,在上一期的文章中,我们对Dash生态里常用的渲染网页静态表格的方法做了一系列的介绍,使得我们可以配合pandas渲染出灵活丰富的网页静态表格。

  而在今天的教程内容作为静态部件篇三部曲的最后一篇,我将带大家学习Dash生态中常用的若干辅助性质的静态部件,有了它们,我们搭建出的Dash应用会更加完善和正式~

图1

2 Dash中常用的辅助性静态部件

  我们前两期介绍的众多静态部件,主要都是用来作为某种具体类型内容的容器,譬如文字、图片、视频等。

  但在日常使用中大家都会见识过一些在网页中起辅助作用的内容,他们对网页主题内容起到提示补充等辅助性功能。而在Dash生态中常用的有:

2.1 Tooltip()提示框

  dash-bootstrap-components中封装的Tooltip(),可以帮助我们无需回调即可创建悬浮提示框。而提示框需要绑定其他的部件来触发,这样的部件即为Tooltip()目标部件,我们只需要将目标部件的id作为Tooltip()target参数传入,即可在鼠标悬停于目标部件时自动弹出提示框:

app1.py

  1. import dash
  2. import dash_bootstrap_components as dbc
  3. import dash_html_components as html
  4. app = dash.Dash(__name__)
  5. app.layout = html.Div(
  6. dbc.Container(
  7. [
  8. html.Br(),
  9. html.Br(),
  10. html.Br(),
  11. html.P(
  12. [
  13. '在',
  14. html.A('Dash',
  15. href='https://dash.plotly.com/',
  16. id='dash'),
  17. '中,我们可以使用',
  18. html.A('dash_bootstrap_components',
  19. href='https://github.com/facultyai/dash-bootstrap-components',
  20. id='dash_bootstrap_components'),
  21. '来快速完成基于网格系统的页面布局!',
  22. dbc.Tooltip('Dash是一整套基于Python的web应用快速搭建方案。',
  23. target='dash'),
  24. dbc.Tooltip('dash_bootstrap_components是Dash第三方拓展中对bootstrap诸多特性的迁移。',
  25. target='dash_bootstrap_components')
  26. ]
  27. )
  28. ]
  29. )
  30. )
  31. if __name__ == '__main__':
  32. app.run_server(debug=True)

  可以看到我们分别给两个html.A()部件绑定上相应的提示框,从而实现了鼠标悬停显示提示框内容。

图2

  Tooltip()还具有一些额外参数可以帮助我们自定义显示效果,常用的有:

  • placement

  参数placement用于设置提示框弹出方向,基础的可选参数有leftrighttop以及bottom,分别代表左右上下弹出,你还可以在设定方向之后加上后缀-start-end来对提示框箭头位置做进一步调整。

  • autohide

  autohide是一个Bool型参数,用于设置是否在鼠标移出目标部件悬停区域后立刻关闭,默认为True,当设置为False后,鼠标快速移动到提示框之上不会关闭,从而方便用户进行一些复制操作。

  • delay

  delay参数接受字典输入,格式如{'show': 数值, 'hide': 数值},可分别来设置悬浮后提示框显示,以及鼠标移出后提示框隐藏的动画时长,单位毫秒,默认为{'show': 0, 'hide': 250}

  你可以结合自己的实际需求定制出想要的提示框效果。

2.2 Spinner()创建加载动画

  在很多情况下,我们在web应用中执行某些耗时明显的操作时,最好是给对应的区域加载一些动画用来提示用户web应用正在计算中或者某一块内容正在加载中,这在Dash中可以利用部件Spinner()来实现。

  使用起来很简单,因为我们的web应用所谓的异步计算中或加载中状态,其实就是某个回调在完成输出前的计算状态。

  因此Spinner()的逻辑是将其嵌套在内的子元素视为监听目标,当子元素中至少有一个元素处于回调计算中状态时,就会显示加载动画,默认动画是旋转的未闭合圆圈,对应默认参数type='border',而另一种可选的参数type='grow'则会显示为不断浮现又消失的圆;还可用color参数设置颜色,以及设置fullscreen=True来实现全屏加载动画:

app2.py

  1. import dash
  2. import dash_bootstrap_components as dbc
  3. import dash_html_components as html
  4. from dash.dependencies import Input, Output
  5. import time
  6. app = dash.Dash(__name__)
  7. app.layout = html.Div(
  8. dbc.Container(
  9. [
  10. html.Br(),
  11. html.Br(),
  12. html.Br(),
  13. dbc.Row(dbc.Spinner(color='grey')),
  14. dbc.Row(dbc.Spinner(color='red', type='grow')),
  15. dbc.Row(dbc.Button('点击计算', id='start')),
  16. dbc.Row(dbc.Spinner(html.P('计算结果', id='output'))),
  17. dbc.Row(dbc.Button('全屏点击计算', id='start-fullscreen')),
  18. dbc.Row(dbc.Spinner(html.P('计算结果', id='output-fullscreen'), fullscreen=True)),
  19. ]
  20. )
  21. )
  22. @app.callback(
  23. Output('output', 'children'),
  24. Input('start', 'n_clicks'),
  25. prevent_initial_call=True
  26. )
  27. def loading(n_clicks):
  28. time.sleep(1)
  29. return '计算完成!'
  30. @app.callback(
  31. Output('output-fullscreen', 'children'),
  32. Input('start-fullscreen', 'n_clicks'),
  33. prevent_initial_call=True
  34. )
  35. def loading(n_clicks):
  36. time.sleep(1)
  37. return '计算完成!'
  38. if __name__ == '__main__':
  39. app.run_server(debug=True)

图3

  而Spinner()中虽然只提供了上述两种样式的加载动画,但其实提供了fullscreen_stylespinner_style参数来供用户自定义css来实现更多样的加载动画效果,关于这部分内容我们将在之后单独写一期教程,到时还会与Dash自带的Loading()部件进行比较。

2.3 Tabs()+Tab()创建多选项卡

  在Dash中我们可以使用dash-bootstrap-components中的Tabs()来组织Tab()子元素,这时每个Tab()之下的子元素就可以视为单独的页面,从而通过点击对应选项卡进入其他选项卡页面,使得我们的应用形式更加丰富:

app3.py

  1. import dash
  2. import dash_html_components as html
  3. import dash_bootstrap_components as dbc
  4. app = dash.Dash(__name__)
  5. app.layout = html.Div(
  6. dbc.Container(
  7. dbc.Tabs(
  8. [
  9. dbc.Tab(
  10. [
  11. html.Br(),
  12. html.P('这是选项卡1')
  13. ],
  14. label='选项卡1'
  15. ),
  16. dbc.Tab(
  17. [
  18. html.Br(),
  19. html.P('这是选项卡2')
  20. ],
  21. label='选项卡2'
  22. ),
  23. dbc.Tab(
  24. [
  25. html.Br(),
  26. html.P('这是选项卡3')
  27. ],
  28. label='选项卡3'
  29. ),
  30. ]
  31. ),
  32. style={'margin-top': '100px'}
  33. )
  34. )
  35. if __name__ == '__main__':
  36. app.run_server(debug=True)

  这时每个Tab()下组织的内容就相当于独立的界面,非常的方便:

图4

  并且Tab()提供了参数tab_stylelabel_style以及active_tab_style参数,使得我们可以分别设置选项卡容器、选项卡标签以及切换到对应选项卡后的标签样式:

app4.py

  1. import dash
  2. import dash_bootstrap_components as dbc
  3. import dash_html_components as html
  4. app = dash.Dash(__name__)
  5. app.layout = html.Div(
  6. dbc.Container(
  7. dbc.Tabs(
  8. [
  9. dbc.Tab(label='选项卡1', tab_style={'background-color': 'lightgrey'}),
  10. dbc.Tab(label='选项卡2', label_style={'color': 'red'}),
  11. dbc.Tab(label='选项卡3',
  12. tab_style={'margin-left': 'auto'},
  13. active_label_style={'color': 'green'}),
  14. ]
  15. ),
  16. style={'margin-top': '100px'}
  17. )
  18. )
  19. if __name__ == '__main__':
  20. app.run_server(debug=True)

图5

  这个例子涉及的部分内容可能你现在还不熟悉,不过没关系,我们会在之后专门单独的详细教程~


  静态部件在Dash常用部件中虽然不承担更具功能性和交互性的作用,但是我们给编写的Dash应用增光添彩不可或缺的内容,这三期介绍的只是相对常用的一些静态部件,还有更多我们将会在之后偶然使用到时再提及,之后就会进入到Dash中承担web应用主要功能的各种交互部件的教程,敬请期待~

  以上就是本文的全部内容,欢迎在评论区与我们进行讨论!

(数据科学学习手札110)Python+Dash快速web应用开发——静态部件篇(下)的更多相关文章

  1. (数据科学学习手札108)Python+Dash快速web应用开发——静态部件篇(上)

    本文示例代码已上传至我的Github仓库https://github.com/CNFeffery/DataScienceStudyNotes 1 简介 这是我的系列教程Python+Dash快速web ...

  2. (数据科学学习手札109)Python+Dash快速web应用开发——静态部件篇(中)

    本文示例代码已上传至我的Github仓库https://github.com/CNFeffery/DataScienceStudyNotes 1 简介 这是我的系列教程Python+Dash快速web ...

  3. (数据科学学习手札118)Python+Dash快速web应用开发——特殊部件篇

    本文示例代码已上传至我的Github仓库https://github.com/CNFeffery/DataScienceStudyNotes 1 简介 这是我的系列教程Python+Dash快速web ...

  4. (数据科学学习手札102)Python+Dash快速web应用开发——基础概念篇

    本文示例代码与数据已上传至我的Github仓库https://github.com/CNFeffery/DataScienceStudyNotes 1 简介 这是我的新系列教程Python+Dash快 ...

  5. (数据科学学习手札115)Python+Dash快速web应用开发——交互表格篇(上)

    本文示例代码已上传至我的Github仓库https://github.com/CNFeffery/DataScienceStudyNotes 1 简介 这是我的系列教程Python+Dash快速web ...

  6. (数据科学学习手札116)Python+Dash快速web应用开发——交互表格篇(中)

    本文示例代码已上传至我的Github仓库https://github.com/CNFeffery/DataScienceStudyNotes 1 简介 这是我的系列教程Python+Dash快速web ...

  7. (数据科学学习手札117)Python+Dash快速web应用开发——交互表格篇(下)

    本文示例代码已上传至我的Github仓库https://github.com/CNFeffery/DataScienceStudyNotes 1 简介 这是我的系列教程Python+Dash快速web ...

  8. (数据科学学习手札103)Python+Dash快速web应用开发——页面布局篇

    本文示例代码已上传至我的Github仓库https://github.com/CNFeffery/DataScienceStudyNotes 1 简介 这是我的系列教程Python+Dash快速web ...

  9. (数据科学学习手札105)Python+Dash快速web应用开发——回调交互篇(中)

    本文示例代码已上传至我的Github仓库https://github.com/CNFeffery/DataScienceStudyNotes 1 简介 这是我的系列教程Python+Dash快速web ...

随机推荐

  1. Network UVA - 315 无向图找割点

    题意: 给你一个无向图,你需要找出来其中有几个割点 割点/割项: 1.u不为搜索起点,low[v]>=dfn[u] 2.u为搜索起点,size[ch]>=2 3.一般情况下,不建议在tar ...

  2. HDU 3416 Marriage Match IV (最短路径&&最大流)

    /*题意: 有 n 个城市,知道了起点和终点,有 m 条有向边,问从起点到终点的最短路一共有多少条.这是一个有向图,建边的时候要注意!!解题思路:这题的关键就是找到哪些边可以构成最短路,其实之前做最短 ...

  3. 加密算法——RSA算法(c++简单实现)

    RSA算法原理转自:https://www.cnblogs.com/idreamo/p/9411265.html C++代码实现部分为本文新加 RSA算法简介 RSA是最流行的非对称加密算法之一.也被 ...

  4. spring再学习之AOP事务

    spring中的事务 spring怎么操作事务的: 事务的转播行为: 事务代码转账操作如下: 接口: public interface AccountDao { //加钱 void addMoney( ...

  5. Java之浅拷贝和深拷贝

    [概述] Java中的对象拷贝 ( Object Copy ) 是指将一个对象的所有属性(成员变量)拷贝到另一个有着相同类类型的对象中去.例如,对象 A 和对象 B 都属于类 S,具有属性 a 和 b ...

  6. anaconda jupyter notebook 启动方法

    介绍 anaconda jupyter notebook是一种基于浏览器的python编译环境.(大概) 使用时可能因为浏览器缓存造成问题. 但是很方便. 启动方法 anaconda navigato ...

  7. zoj-3872 Beauty of Array (dp)

    ]Edward has an array A with N integers. He defines the beauty of an array as the summation of all di ...

  8. Leetcode(19)-删除链表的倒数第N个节点

    给定一个链表,删除链表的倒数第 n 个节点,并且返回链表的头结点. 示例: 给定一个链表: 1->2->3->4->5, 和 n = 2. 当删除了倒数第二个节点后,链表变为 ...

  9. JavaScript 注释规范

    JavaScript 注释规范 总原则 As short as possible(如无必要,勿增注释).尽量提高代码本身的清晰性.可读性. As long as necessary(如有必要,尽量详尽 ...

  10. Taro API

    Taro API Taro 的 API 包括 Taro 内置提供的 API 以及对小程序的端能力 API 的封装. https://taro-docs.jd.com/taro/docs/apis/ab ...