- VisualStudio2022插件的安装及使用-编程手把手系列文章
- pprof-在现网场景怎么用
- C#实现的下拉多选框,下拉多选树,多级节点
- 【学习笔记】基础数据结构:猫树
在 Streamlit 应用开发中,Fragments组件是一种用于更精细地控制页面元素更新和显示顺序的工具.
它允许开发者将内容分解成多个小的片段,这些片段可以按照特定的顺序或者逻辑进行更新,而不是一次性地更新整个页面或容器中的所有内容.
这为创建动态且交互性强的用户界面提供了更多的灵活性和控制力.
Fragments有点像Web2.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)表示每天自动重新运行片段。 |
Fragments和上一篇介绍的Form看起来很类似,都是将多个关联的组件组织起来,统一更新和管理.
实际上,它们的应用场景和工作方式区别很大,了解其中的区别,可以让我们更好的选择相应的组件.
从用途上来看,Fragments主要用于:
Fragments
展示数据加载的步骤,然后再展示数据分析方法的介绍。Fragments
可以将更新操作拆分成多个小片段更新。每次只刷新必要的部分,提高应用的响应速度。比如,在一个实时数据监控应用中,使用Fragments
可以分别更新不同数据图表的部分,而不是一次性更新整个页面的所有图表。Fragments
能够帮助组织和控制页面元素的显示与隐藏。例如,在一个多步骤的操作流程应用中,通过Fragments
管理每个步骤中不同操作按钮和提示信息的显示和隐藏。而Form则主要用于:
从组件的工作方式来看,Fragments本身并不具有像表单那样固定的结构.
它更像是一个容器,可以容纳各种 Streamlit 组件,如文本、按钮、图表等。可以通过代码逻辑来控制这些组件在Fragments中的显示顺序和条件.
而表单具有比较明确的结构,通常包含form标签(在 HTML 层面)和一系列的输入组件,如st.text_input、st.selectbox等.
表单中的所有输入组件通常是相互关联的,它们共同构成了一个数据收集单元.
而且,表单可以通过st.form_submit_button来触发提交操作,并且可以使用st.form上下文管理器来确保表单内的组件数据在提交时能够正确地一起处理.
在数据处理方面,Fragments相对灵活,例如,在一个包含多个Fragments的应用中, 。
每个fragment可能有自己独立的按钮,点击按钮后的既可以更新当前fragment,也可以触发其他fragment的更新.
数据交互更多地体现在不同fragment之间的切换和内容更新上.
而Form在数据处理主要围绕用户输入的数据,在表单提交后,通常会对收集到的数据进行验证、清洗和存储等操作.
例如,将用户在表单中输入的注册信息发送到数据库进行存储,或者根据用户在表单中选择的查询条件从数据库中获取数据并显示.
表单内的交互主要集中在用户输入和提交操作上,以及根据输入数据的合法性给予用户相应的反馈,如提示输入错误信息等.
下面通过两个根据实际情况简化的示例来演示Fragments的使用场景.
在这个示例中,我们创建了一个产品介绍页面,通过Fragments组件将信息分成三个步骤逐步显示.
首先显示欢迎信息,当用户点击 【点击了解更多】按钮后,显示产品功能信息, 。
再点击【继续下一步】按钮后,显示产品优势信息.
import streamlit as st
@st.fragment
def step1():
st.write("欢迎来到我们的产品介绍页面。")
if st.button("点击了解更多", key="step1"):
step2()
@st.fragment
def step2():
st.write("这是我们产品的主要功能:功能 1、功能 2、功能 3。")
if st.button("继续下一步", key="step2"):
step3()
@st.fragment
def step3():
st.write("最后,这是我们产品的优势所在,如高效性、易用性等。")
if st.button("刷新", key="step3"):
st.rerun()
# 初始显示第一个片段
step1()
这个示例模拟一个数据展示大屏,大屏被分成两列,分别展示销售数据和流量数据.
每个数据区域都有自己的刷新按钮,点击按钮时,只会重新运行对应的 fragment 函数,从而实现该区域数据的局部刷新,不会影响其他部分.
import streamlit as st
import random
# 模拟获取一些数据
def get_sales_data():
return random.randint(100, 1000)
def get_traffic_data():
return random.randint(50, 500)
# 创建销售数据展示片段
@st.fragment
def sales_data_fragment():
st.subheader("销售数据")
# 获取并显示销售数据
sales_data = get_sales_data()
st.write(f"今日销售额: {sales_data}")
# 销售数据的局部刷新
if st.button("刷新销售数据", key="sales"):
st.rerun(scope="fragment")
# 创建流量数据展示片段
@st.fragment
def traffic_data_fragment():
st.subheader("流量数据")
# 获取并显示流量数据
traffic_data = get_traffic_data()
st.write(f"今日流量: {traffic_data}")
# 流量数据的局部刷新
if st.button("刷新流量数据", key="traffic"):
st.rerun(scope="fragment")
# 主函数,在大屏上排列各个片段
def main():
# 将屏幕划分为两列,分别放置不同的片段
col1, col2 = st.columns(2)
with col1:
sales_data_fragment()
with col2:
traffic_data_fragment()
if __name__ == "__main__":
main()
最后,总结下应该在什么时候可以考虑选择Fragments来构建我们的streamlit应用.
首先,需要逐步显示信息时,可以考虑使用Fragments.
例如在创建一个教程或者引导性的应用界面时,先显示一部分说明文字,然后在用户进行某个操作(如点击按钮)后再显示下一步的内容,而不是一次性将所有教程信息都呈现给用户,避免信息过载,影响用户的理解和操作体验.
其次,优化页面更新性能时,可以考虑使用Fragments.
比如,当应用中有大量数据或者复杂的 UI 更新时,Fragments组件可以将更新操作拆分成多个小的片段更新。这样,在每次更新时只刷新必要的部分,减少了页面重新渲染的工作量,从而提高应用的响应速度和性能.
还有构建复杂交互逻辑时,也可以考虑使用Fragments.
在构建具有复杂交互逻辑的应用时,Fragments组件能够帮助开发者更好地组织和控制页面元素的显示与隐藏.
最后此篇关于『玩转Streamlit』--片段Fragments的文章就讲到这里了,如果你想了解更多关于『玩转Streamlit』--片段Fragments的内容请搜索CFSDN的文章或继续浏览相关文章,希望大家以后支持我的博客! 。
注意:列转行的方法可能是我独创的了,呵呵,因为在网上找不到哦,全部是我自己写的,用到了系统的SysColumns (一)行转列的方法 先说说行转列的方法,这个就比较好想了,利用拼sql和case
您好,我是编码新手,正在尝试找出此 getopt 不起作用的原因。我的编译器提示“i:o:” 错误 C2664“int getopt(int,char **,char *)”:无法将参数 3 从“co
mockjs作用就是,生成随机模拟数据,拦截 ajax 请求,可以对数据进行增删改查。在生成数据时,我们就需要能够熟练使用 mock.js 的语法。 Mockjs 的语法规范包括两部分:数据模
我用 Java 开发了一个 SDK,我也有一个运行时。我想限制使用运行时 jar 的开发。我的 SDK 是节点锁定的,但我不想保持运行时节点锁定,以便我的客户可以自由地使用我的 SDK 开发应用程序,
这是玩 Rust 的链接: http://rustbyexample.com/match/guard.html 我发现 Rust 在我对无符号变量取反时显示警告,因此执行下面的代码以 结尾 warni
我正在尝试使用简单的 创建一个按钮栏并将其不透明度更改为 50% 并提供背景 但是进入这个分区的元素表现出与父级相同的透明度 .我希望它们保持 100% 的不透明度。 (这是不可能的)。如何使这成
谁能想出一种方法来使用 ol/li 列表中的数字来标记图像? 应用一些 CSS 后应该输出以下内容: ------ ------ ------ | | | | |
我有一个我认为微不足道的问题。我必须处理德语字母表中的元音变音 (äöü)。在Unicode中,似乎有几种显示它们的方法,其中之一就是组合字符。我需要规范化这些不同的方式,将它们全部替换为单字符代码。
来源:blog.csdn.net/weixin_44730681/article/details/107944048 1 基本概念 2 添加依赖 3 配置相关属性 4 sql监控 5 慢sql记录 6
我想对我的数据库进行两次调用,这将需要一段时间才能返回结果,而且我不想阻塞当前线程。我使用 Akka Futures 来包装数据库调用。 我不想等待(阻塞)两个调用返回,而是指定要调用的回调函数,然后
细心的人都会发现github个人主页有一个记录每天贡献次数的面板,我暂且称之为贡献面板。就像下图那个样子。只要当天在github有提交记录,对应的小格子就会变成绿色,当天提交次数越多,颜色也会越深。
今天第一次看 Bazel。 关于构建 cpp tutorial ,我可以看到它如何构建简单的可执行文件和存档库,但它看起来不像示例创建或使用共享库。 有谁知道用于演示此过程的简单示例 BUILD 文件
我正在尝试让 Play 2.2 在 IntelliJ IDEA 中运行,但遇到了一些问题。 Play 2 Framework 插件似乎不适用于 Play 2.2。 使用 play 控制台设置项目并使用
我正在使用类似单选按钮的 div,有一个问题。 我这样声明一个函数和变量 我设置了两种样式,一个 .buttonUp 和 .buttonDown 应用于 div 的 onclick 事件。 var
我是一名优秀的程序员,十分优秀!