『玩转Streamlit』–片段Fragments

在开发 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_inputst.selectbox 等。表单中的所有输入组件通常是相互关联的,它们共同构成了一个数据收集单元。而且,表单可以通过 st.form_submit_button 来触发提交操作,并且可以使用 st.form 上下文管理器来确保表单内的组件数据在提交时能够正确地一起处理。

2.3. 数据处理

数据处理方面,Fragments 相对灵活。例如,在一个包含多个 Fragments 的应用中,每个 fragment

文章整理自互联网,只做测试使用。发布者:Lomu,转转请注明出处:https://www.it1024doc.com/4311.html

(0)
LomuLomu
上一篇 2024 年 12 月 24 日 下午4:28
下一篇 2024 年 12 月 24 日 下午5:02

相关推荐

  • Java编程进阶指南——深入理解类与对象的核心概念⑦

    Java编程进阶指南📚——深入理解类与对象的核心概念⑦ 一、面向对象编程基础 1.1 面向对象编程的本质 Java作为纯粹的面向对象编程语言(OOP),其核心理念是将现实世界中的事物抽象为程序中的对象。这种编程范式强调通过对象之间的协作来解决问题。面向对象编程的优势:- 更贴近人类思维方式- 便于构建复杂的软件系统- 提升代码的可扩展性和维护性- 通过对象协…

    2025 年 5 月 19 日
    31500
  • java: JDK isn‘t specified for module ‘product-service‘问题解决

    目录 问题 解决方法 1.打开File->Project Structure… 2.将Project SDK修改为17 Oracle OpenJDK 17.0.12,并Apply,OK 问题 添加module后报错:java: JDK isn’t specified for module ‘product-service’ 查看pom.xml文件也添加了…

    2025 年 1 月 9 日
    50300
  • manim边做边学–动画更新

    今天介绍Manim中用于动画更新的3个类 ,分别是: UpdateFromFunc:根据自定义的函数来动态更新 Mobject 的属性 UpdateFromAlphaFunc:根据动画的进度来平滑地改变 Mobject 的属性 MaintainPositionRelativeTo:保持多个 Mobject 之间的相对位置关系 这3个类 分别从自定义更新、基于…

    2025 年 1 月 13 日
    50400
  • 架构师启示录:知识模型、落地方法与思维模式PDF、EPUB免费下载

    适读人群 :资深程序员、初级架构师 从架构知识模型、架构落地方法、架构思维模式三大维度介绍架构师的能力模型,带你穿越“认知迷雾” 电子版仅供预览,下载后24小时内务必删除,支持正版,喜欢的请购买正版书籍 点击原文去下载 书籍信息 作者: 灵犀出版社: 机械工业出版社出版年: 2024-3页数: 212装帧: 平装丛书: 架构师书库ISBN: 97871117…

    2025 年 1 月 11 日
    55000
  • 如何做好软件架构师

    本文以个人视野聊下软件架构师的工作以及软件架构设计知识。做开发工作接近10年了,期间主要做Windows应用开发。在成熟的“华南区最大WPF团队”希沃白板呆了较长一段时间、后面从0到1构建Windows技术栈以及会议屏软件集,在软件设计这块自己成长了很多。之前整理过如何做好技术经理 – 唐宋元明清2188 – 博客园,这里梳理下自己的设计思维,算是自己阶段性…

    未分类 2025 年 1 月 12 日
    42800

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

联系我们

400-800-8888

在线咨询: QQ交谈

邮件:admin@example.com

工作时间:周一至周五,9:30-18:30,节假日休息

关注微信