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

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

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

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. 使用触发器来审计表的DML、DDL操作

    最近帮客户排查某问题时,因为怀疑应用对某张配置表有变更,所以需要对这张表的所有操作进行审计. 原本Oracle对某张表的审计是非常方便的,一条命令就可以实现,也不需要费心自定义审计表. -- 启用对表 ...

  2. GDB原始函数信息中获取函数名

    示例: kwdbts::Logger::log(kwdbts::_kwdbContext_t*, kwdbts::KwdbModule, kwdbts::LogSeverity, char const ...

  3. Linux基础优化与常用软件包说明

    1.安装常用工具 1.1CentOS(7) 1.1.1 是否联网 ping qq.com 1.1.2 配置yum源(安装软件的软件仓库) 默认情况下yum下载软件的时候是从随机地址下载. 配置yum从 ...

  4. DigitalOcean Control (doctl) 使用方法

    安装 macOS brew install doctl Ubuntu sudo snap install doctl # 授予 snap 应用额外权限 sudo snap connect doctl: ...

  5. Java基础 韩顺平老师的 泛型 的部分笔记

    553,泛型引入 package com.hspedu.list_; import java.util.*; import java.util.concurrent.CompletionService ...

  6. 我对互联网和网站运作的理解 – Domain, DNS, Hosting 介绍

    前言 一直没有写过关于互联网和网站运作的原理相关文章. 这篇就稍微介绍一下它们. 1. 电脑文件 网站是由许多网页组成的, 网页就是电脑里的 file. extension 是 .html 类似于 . ...

  7. 解锁Java线程池:实战技巧与陷阱规避

    专业在线打字练习网站-巧手打字通,只输出有价值的知识. 一 前言 线程池作为初学者常感困惑的一个领域,本次"巧手打字通课堂"将深入剖析其中几个最为普遍的误区.为了更清晰地阐述这些知 ...

  8. Blazor开发框架Known-V2.0.11

    Known今天发布了V2.0.11版本,本次版本添加了系统WebApi在线测试,系统菜单样式配置,表格支持用户设置栏位显隐和顺序,系统上下文支持静态组件与后端交互,以及对PgSQL进行了详细的测试,修 ...

  9. Redis系列补充:聊聊布隆过滤器(go语言实践篇)

    ★ Redis24篇集合 1 介绍 布隆过滤器(Bloom Filter)是 Redis 4.0 版本之后提供的新功能,我们一般将它当做插件加载到 Redis Service服务器中,给 Redis ...

  10. 大语言模型(LLM)

    大语言模型 LLM 人工智能 Artificial Intelligence 一门研究如何使计算机能够模拟和执行人类智能任务的科学和技术领域 是研究.开发用于模拟.延伸和扩展人的智能的理论.方法.技术 ...