在开发 Streamlit
应用时,Fragments
组件是一种强大的工具,它允许开发者以更精细的方式控制页面元素的更新和显示顺序。通过将内容划分为多个小片段,开发者可以按照特定的顺序或逻辑逐一更新这些片段,而不是一次性更新整个页面或容器中的所有内容。这种方法为创建动态且具有高度交互性的用户界面提供了额外的灵活性和控制力。
1. 概述
Fragments
的概念类似于 Web 2.0
时代的 Ajax
技术,它能够将页面内容分解成多个小片段,类似于将一幅完整的画作分割成多个小拼图。这样做的优势在于,Fragments
可以对更新操作进行细分,仅更新部分内容,从而提升页面的响应速度。本质上,它为开发者在构建动态、交互性强的应用界面时,提供了更高的灵活性和精准的内容控制能力。
使用 Fragments
组件时,通常通过 st.fragment
装饰器来编写小片段,后续将通过示例进行演示。
参数说明:
名称 | 类型 | 描述 |
---|---|---|
func | 函数对象 | 将其转换为片段的函数,由 @st.fragment 装饰器装饰的函数 |
run_every | 整数、浮点数、时间间隔、字符串或None | None (默认值):片段仅在用户触发事件时重新运行。 整数或浮点数:指定以秒为单位的时间间隔,例如5表示每5秒自动重新运行片段。 字符串:指定时间格式,如"1d"(1天)、"1.5 days"(1.5天)或"1h23s"(1小时23秒),该格式被 Pandas 的 Timedelta 构造函数支持。 timedelta对象(来自 Python 的内置 datetime 库):如 timedelta(days=1) 表示每天自动重新运行片段。 |
2. Fragments 与 Form 区别
Fragments
和之前介绍的 Form
在外观上可能相似,都是将多个相关的组件组织起来,统一更新和管理。然而,它们的应用场景和工作方式有很大的不同。了解这些区别可以帮助我们更好地选择适合的组件。
2.1. 主要用途
从用途上来看,Fragments
主要用于:
- 引导式内容展示:创建引导性的应用界面,逐步展示信息。例如,在数据分析应用的教程中,先使用
Fragments
展示数据加载的步骤,然后再展示数据分析方法的介绍。 - 优化页面更新性能:在处理大量数据或复杂 UI 更新时,
Fragments
可以将更新操作拆分成多个小片段更新。每次只刷新必要的部分,提高应用的响应速度。例如,在实时数据监控应用中,使用Fragments
可以分别更新不同数据图表的部分,而不是一次性更新整个页面的所有图表。 - 构建复杂交互逻辑:对于具有复杂交互逻辑的应用,
Fragments
能够帮助组织和控制页面元素的显示与隐藏。例如,在多步骤的操作流程应用中,通过Fragments
管理每个步骤中不同操作按钮和提示信息的显示和隐藏。
而 Form
则主要用于:
- 数据收集:主要用于收集用户输入的数据。这可以是简单的文本信息,也可以是复杂的选择,如在一个产品配置表单中,用户通过下拉菜单选择产品型号、颜色等选项。
- 数据验证和提交:表单通常包含数据验证机制,以确保用户输入的数据符合要求。并且,表单提供了提交功能,将收集到的用户数据发送到服务器或者进行本地处理。
2.2. 工作方式
从组件的工作方式来看,Fragments
本身并不具有像表单那样固定的结构。它更像是一个容器,可以容纳各种 Streamlit
组件,如文本、按钮、图表等。可以通过代码逻辑来控制这些组件在 Fragments
中的显示顺序和条件。
而表单 具有比较明确的结构,通常包含 form
标签(在 HTML 层面)和一系列的输入组件,如 st.text_input
、st.selectbox
等。表单中的所有输入组件通常是相互关联的,它们共同构成了一个数据收集单元。而且,表单可以通过 st.form_submit_button
来触发提交操作,并且可以使用 st.form
上下文管理器来确保表单内的组件数据在提交时能够正确地一起处理。
2.3. 数据处理
在数据处理方面,Fragments
相对灵活。例如,在一个包含多个 Fragments
的应用中,每个 fragment
文章整理自互联网,只做测试使用。发布者:Lomu,转转请注明出处:https://www.it1024doc.com/4311.html