首页  >  文章  >  后端开发  >  Streamlit 部分母带布局

Streamlit 部分母带布局

Linda Hamilton
Linda Hamilton原创
2024-11-05 21:39:02900浏览

Streamlit Part Mastering Layouts

掌握 Streamlit 中的布局:分步指南

Streamlit 是一种广泛使用的框架,用于构建交互式 Python 应用程序,特别是数据可视化、仪表板和机器学习演示,它不仅因其用户友好性而脱颖而出,还因其创建视觉吸引力和直观布局的能力。在这篇博文中,我们将引导您完成一个 Python 示例,演示如何在 Streamlit 中有效利用布局元素,例如列、容器、占位符等。

让我们来分解一下可以用来使您的应用程序更干净、更具交互性的布局技术。

准备工作:页面配置

在进入布局元素之前,我们使用 st.set_page_config() 配置页面。此方法允许您在应用程序加载时自定义页面标题、图标、布局和侧边栏行为。

st.set_page_config(
    page_title="Streamlit Layouts Tutorial",
    page_icon=":art:",
    layout="wide",
    initial_sidebar_state="collapsed",
)

在这里,我们为页面指定一个标题,将布局设置为“宽”(利用整个浏览器宽度),并最初折叠侧边栏以获得更清晰的外观。

1. 用列构建

Streamlit 中最强大的布局工具之一是列。它们允许您并排显示内容,使您的应用程序看起来更有条理、更具视觉吸引力。

st.header("Columns")
st.write("Using `st.columns()` to create columns.")

# Create two columns
col1, col2 = st.columns(2)

col1.write("This is column 1")
if col1.button("Button in Column 1"):
    col1.write("Button 1 pressed")

col2.write("This is column 2")
if col2.button("Button in Column 2"):
    col2.write("Button 2 pressed")

在此代码片段中,我们创建两列并在每列中放置按钮。各列被均匀分割,一列中的任何交互都不会影响另一列。

为什么是专栏?

列非常适合并排显示相关信息,例如数据摘要、图表或交互式控件。

2. 用容器分组

接下来是容器元素。 Streamlit 中的容器允许您将多个元素分组在一起,从而更轻松地管理复杂的布局。

st.header("Container")
st.write("Using `st.container()` to group elements together.")

with st.container():
    st.write("This is inside a container")
    st.button("Button inside container")

    # Nested container
    with st.container():
        st.write("This is a nested container")
        st.button("Button inside nested container")

在此示例中,st.container() 方法将多个元素(文本和按钮)包装在一起。您甚至可以将容器嵌套在一起以创建分层布局。

为什么选择容器?

容器有助于维护干净且分组的结构,尤其是在处理逻辑上属于在一起的多个内容部分时。

3. 使用占位符动态更新

Streamlit 的一个强大功能是它能够动态更新内容。这是使用 st.empty() 完成的,它充当占位符,您可以稍后更新。

st.header("Empty")
st.write("Using `st.empty()` as a placeholder for updating content.")

placeholder = st.empty()

# Update the placeholder content dynamically
for i in range(5):
    placeholder.write(f"Updating... {i}")
    time.sleep(1)

placeholder.write("Done!")

在此示例中,我们使用 for 循环每秒用新值更新占位符。循环完成后,我们将占位符内容替换为“完成!”

为什么使用占位符?

占位符非常适合您需要动态更新应用程序的某些部分而不重新运行整个应用程序的情况,例如实时数据源或进度更新。

4. 使用扩展器隐藏和显示

可扩展部分非常适合隐藏高级设置或您不想弄乱主布局的附加信息。

st.set_page_config(
    page_title="Streamlit Layouts Tutorial",
    page_icon=":art:",
    layout="wide",
    initial_sidebar_state="collapsed",
)

在这里,我们将一些内容和一个按钮包装在扩展器内,用户可以单击该按钮来显示或隐藏内容。

为什么选择扩展器?

扩展器通过隐藏不太重要或高级的选项来帮助保持界面整洁,同时仍然可以在需要时轻松访问它们。

5. 创建表格

Streamlit 表单允许您将输入小部件分组在一起并等待用户一次提交所有内容,而不是单独对每个输入做出反应。

st.header("Columns")
st.write("Using `st.columns()` to create columns.")

# Create two columns
col1, col2 = st.columns(2)

col1.write("This is column 1")
if col1.button("Button in Column 1"):
    col1.write("Button 1 pressed")

col2.write("This is column 2")
if col2.button("Button in Column 2"):
    col2.write("Button 2 pressed")

在此示例中,我们使用表单来收集用户的姓名和年龄,只有在用户单击提交按钮后,Streamlit 才会处理输入。

为什么要使用表格?

表单确保输入操作被分组并批量提交,这非常适合用户注册或数据过滤等情况。

6. 添加侧边栏

侧边栏对于导航、应用程序设置或不会扰乱主界面的额外选项很有用。

st.header("Container")
st.write("Using `st.container()` to group elements together.")

with st.container():
    st.write("This is inside a container")
    st.button("Button inside container")

    # Nested container
    with st.container():
        st.write("This is a nested container")
        st.button("Button inside nested container")

此代码向侧边栏添加一个按钮,该按钮默认折叠,但可以由用户展开。

为什么使用侧边栏?

侧边栏非常适合辅助内容,例如导航链接、过滤器或应用程序设置,这些内容始终可以访问,但不需要占用主布局中的空间。

7. 使用选项卡导航

选项卡是在单个部分中组织内容的好方法,允许用户在不离开页面的情况下在不同视图之间切换。

st.header("Empty")
st.write("Using `st.empty()` as a placeholder for updating content.")

placeholder = st.empty()

# Update the placeholder content dynamically
for i in range(5):
    placeholder.write(f"Updating... {i}")
    time.sleep(1)

placeholder.write("Done!")

在此示例中,我们使用三个选项卡来显示与动物相关的不同内容。每个选项卡都是独立的并包含自己的内容。

为什么是标签?

选项卡非常适合将相关内容组织成不同的部分,例如不同的数据视图或信息类别,而不需要单独的页面。

结论

掌握 Streamlit 的布局元素使您能够创建干净、交互式且用户友好的应用程序。通过熟练地使用列、容器、占位符、扩展器、表单、侧边栏和选项卡,您可以有效地组织内容并增强整体用户体验。这些工具允许您制作直观的界面,引导用户无缝地使用您的应用程序。


?获取代码:GitHub - jamesbmour/blog_tutorials
?相关Streamlit教程:JustCodeIt
?支持我的工作:请我喝杯咖啡

以上是Streamlit 部分母带布局的详细内容。更多信息请关注PHP中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn