一个优秀的数据应用不仅仅是功能的强大,更在于其用户体验的打造。

而良好的页面布局,作为用户体验的重要组成部分,不仅能够提升信息的可读性,还能引导用户高效地完成操作。

反之,混乱的布局会让人感到困惑和挫败,甚至导致用户放弃使用应用。

Streamlit中,Sidebar(侧边栏)、Columns(列布局)和Tabs(标签页)是三个至关重要的布局组件,它们各自有不同的使用场景,共同构成了应用界面的骨架。

1. 侧边栏 st.sidebar

Sidebar(侧边栏)在Streamlit应用中主要是导航作用。

Sidebar通常位于应用界面的左侧或右侧,它的优势在于,既不会占用主内容区域的空间,又同时保持了对关键功能的即时访问,特别适用于那些需要频繁切换功能或具有多层导航结构的应用。

Sidebar不是菜单,一般不用于页面的切换,它的里面可以包含其他的组件。

下面构建一个简化的数据分析场景,演示Sidebar的使用方法。

我们在Sidebar中设置需要选择的数据集和数据分类(分为测试集验证集),

然后在主页面中获取选择的数据集和数据分类,只实现操作数据的功能。

# 侧边栏中选择数据集
dataset = st.sidebar.selectbox(
"选择数据集?",
(
"手写数字数据",
"房屋成交数据",
"股市交易数据",
),
) # 侧边栏中选择数据分类
data_type = st.sidebar.radio(
"数据分类: ",
("测试集", "验证集", "所有数据"),
) # 右侧页面中的模拟操作
st.title(f"数据集: {dataset}")
st.divider()
st.write(f"数据分类: 【{data_type}】")
st.write(f"TODO!!!: 操作数据的功能")

2. 列布局 st.columns

Columns布局,即列布局,是一种将页面内容分割成多个垂直排列的列,以便更有效地展示信息的布局方式。

这种布局方式不仅提升了页面的视觉吸引力,还显著增强了用户体验,使得信息获取更加直观和便捷。

Streamlit中,可以使用st.columns函数来创建列布局。

这个函数接受一个列表作为参数,列表中的每个元素都是一个函数,代表一列的内容。

Streamlit会按照列表的顺序和长度来渲染列。

比如,我们构造一个数据分析的示例,分3列展示内容,

  • 第一列模拟选择数据
  • 第二列模拟一些配置信息
  • 第三列根据配置模拟绘制图形
# 绘图的类型放在session中
if "graph" not in st.session_state:
st.session_state.graph = "" # 第一列
def column_1():
st.header("1. 选择数据")
st.selectbox(
"选择数据集?",
(
"手写数字数据",
"房屋成交数据",
"股市交易数据",
),
)
# 随机模拟的数据
data = pd.DataFrame(np.random.randn(5, 3), columns=["A", "B", "C"])
st.table(data) def column_2():
st.header("2. 配置数据")
graph = st.radio(
"图形类型: ",
("折线图", "柱状图", "散点图"),
) st.session_state.graph = graph def column_3():
st.header("3. 绘制图形") chart_data = pd.DataFrame(np.random.randn(20, 3), columns=["A", "B", "C"])
if st.session_state.graph == "散点图":
st.scatter_chart(chart_data) if st.session_state.graph == "折线图":
st.line_chart(chart_data) if st.session_state.graph == "柱状图":
st.bar_chart(chart_data) col1, col2, col3 = st.columns(3) with col1:
column_1() with col2:
column_2() with col3:
column_3()

3. 标签页 st.tabs

Tabs组件的主要用途在于将复杂的信息结构分解为多个独立的、可切换的部分,每个部分(或称为“标签页”)都包含相关的内容或功能。

这种设计方式有助于减少用户在同一时间内需要处理的信息量,避免界面过载,同时也便于用户快速找到所需内容。

同样是上面的例子,如果数据的字段很多,配置数据的项目也很多,那么上面的Columns布局就显得很拥挤,

这时,用Tabs布局更好,代码调整很简单。

tab1, tab2, tab3 = st.tabs(["1. 选择数据", "2. 配置数据", "3. 绘制图形"])

with tab1:
tab_1() with tab2:
tab_2() with tab3:
tab_3()

上面函数tab_1()tab_2()tab_3()中的代码和Columns布局示例中的column_1()column_2()column_3()代码基本一样。

随着Columns布局的每个Columns内容逐渐增多时,可以考虑改用Tabs布局。

4. 总结

总之,这三种布局方式各有千秋,选择哪种布局取决于应用的具体需求、用户习惯以及设计目标。

Sidebar(侧边栏)提供持续可见的导航菜单,适合功能繁多或需频繁切换的应用,帮助用户快速定位所需功能,同时保持主内容区域的清晰。

Columns(列布局)则通过分割界面为多个并列区域,实现图文混排或数据报表的灵活展示。

它提高了信息密度,使得用户能够在同一视图中获取更多信息,适用于需要同时展示多种数据类型或视图的场景。

Tabs(标签页)将内容划分为多个独立的、可切换的部分,每个部分包含相关功能或信息。

它有助于节省屏幕空间,同时帮助用户对信息进行逻辑分组,提高信息检索效率。

Tabs适用于功能或信息分类明确,且用户可能需要根据不同需求切换查看的应用。

『玩转Streamlit』--页面布局的更多相关文章

  1. Github 恶搞教程(一起『玩坏』自己的 Github 吧)

    最近在伯乐在线读到一篇趣文,<如何在 Github『正确』做贡献>,里面各种能人恶搞 Github 的『Public contributions』,下面截取几个小伙伴的战绩: 顺藤摸瓜,发 ...

  2. 玩转CSS3(一)----CSS3实现页面布局

    请珍惜小编劳动成果,该文章为小编原创,转载请注明出处. 摘要:     CSS3相对CSS2增加了一些新的布局方式:多栏布局和盒子布局.在这篇文章中,将对CSS2的布局进行简单的回忆,并总结CSS3的 ...

  3. js实现『加载更多』功能实例

    DEMO : 滚动加载示例 关于如何实现『加载更多』功能,网上有插件可用,例如比较著名的使用iscroll.js实现的上拉加载更多.下拉刷新功能. 但实际用起来却是很麻烦.由于是第三方插件,要按照对方 ...

  4. 『Asp.Net 组件』Asp.Net 服务器组件 内嵌JS:让自己的控件动起来

    代码: using System; using System.Web; using System.Web.UI; using System.Web.UI.WebControls; namespace ...

  5. 『Asp.Net 组件』Asp.Net 服务器组件 内嵌图片:自己的图片控件

    代码: using System; using System.Web; using System.Web.UI; using System.Web.UI.WebControls; namespace ...

  6. 2018-2019-2 20165316 『网络对抗技术』Exp3:免杀原理与实践

    2018-2019-2 20165316 『网络对抗技术』Exp3:免杀原理与实践 一 免杀原理与实践说明 (一).实验说明 任务一:正确使用msf编码器,msfvenom生成如jar之类的其他文件, ...

  7. 2017-2018-2 20155303『网络对抗技术』Final:Web渗透获取WebShell权限

    2017-2018-2 『网络对抗技术』Final:Web渗透获取WebShell权限 --------CONTENTS-------- 一.Webshell原理 1.什么是WebShell 2.We ...

  8. 2017-2018-2 20155303『网络对抗技术』Exp9:Web安全基础

    2017-2018-2 『网络对抗技术』Exp9:Web安全基础 --------CONTENTS-------- 一.基础问题回答 1.SQL注入攻击原理,如何防御? 2.XSS攻击的原理,如何防御 ...

  9. 2017-2018-2 20155303『网络对抗技术』Exp8:Web基础

    2017-2018-2 『网络对抗技术』Exp8:Web基础 --------CONTENTS-------- 一.原理与实践说明 1.实践具体要求 2.基础问题回答 二.实践过程记录 1.Web前端 ...

  10. 2017-2018-2 20155303『网络对抗技术』Exp7:网络欺诈防范

    2017-2018-2 『网络对抗技术』Exp7:网络欺诈防范 --------CONTENTS-------- 一.原理与实践说明 1.实践目标 2.实践内容概述 3.基础问题回答 二.实践过程记录 ...

随机推荐

  1. Python-目标检测-将xml文件转换成.txt文件

    代码说明:labels文件夹是工程下的一个文件夹,里面存放的是一些xml文件. 然后我们将这些xml文件中的内容取出来,放在路径path1的文件名下.这样也就完成了xml文件到txt文件的转化. 该代 ...

  2. springcloud集成grpc(二)

    码云地址:https://gitee.com/lpxs/lp-springcloud.git 有问题可以多沟通:136358344@qq.com. 上一章内容介绍了springboot2集成net.d ...

  3. [计算机网络] IPv6

    1 IPv6 概述 引言 近期突发奇想,能不能用 IPv6 的公网地址,给家里的 NAS 做 内网穿透. 技术上是可行的.只是必须确保是 IPv6 的公网地址. 大学学的 IPv6 的知识,早就抛到九 ...

  4. Ubuntu 连接联想 M7206W 打印机

    联想很多打印机其实是 Brother 打印机贴牌(OEM): 所以有时候 Brother 的打印机驱动也可以用于联想打印机. 将打印机连接到 Wi-Fi: 在打印机上,按下 功能 按钮进入设置,通过上 ...

  5. Unity 刚体 AddForce 的几种力类型

    今天在实现 2D 横版跳跃的时候,发现使用AddForce添加的力太突兀了,没有逐渐向上的过程,发现AddForce还有ForceMode mode参数 以下部分内容摘自Bing Copilot总结 ...

  6. 合合信息通过ISO/IEC国际标准双认证,为全球用户提供高合规标准AI服务

    互联网.AI等技术的全球普及为人们提供便捷服务的同时,也带来了信息安全领域的诸多挑战.保护用户隐私及数据安全,是科技企业规范.健康发展的重心.近期,上海合合信息科技股份有限公司(简称"合合信 ...

  7. [TK] 理想的正方形

    题目描述 有一个整数组成的矩阵,现请你从中找出一个指定边长的正方形区域,使得该区域所有数中的最大值和最小值的差最小. 题目分析 其实这道题和滑动窗口很像,而滑动窗口使用优先队列解决. 我们都知道优先队 ...

  8. 2021 IT运维巡展北京站圆满落幕,北京智和信通荣获IT运维样板工程

    10月21日,以"数智转型 运维赋能"为主题的"2021(第十二届)IT运维巡展北京站"圆满落幕.会上行业专家.企业代表以及用户代表等共聚一堂,探讨数智时代下I ...

  9. 五行强度得分_喜用神api免费接口_json数据八字五行强弱接口

    本API接口基于深厚的八字学原理,为用户提供详尽的五行(金.木.水.火.土)强弱分析.五行打分评估,以及精准的喜用神判断.用户只需输入自己的八字信息,即可获得全面而深入的命理解读. ‌一.核心功能‌ ...

  10. 使用dynamic debug帮助调试

    你一定在kernel source code中看过很多pr_debug()/dev_dbg()/print_hex_dump_debug()吧,这些debug语句提供更多的信息帮助我们了解内核运行流程 ...