Python 应用开发:Streamlit 布局篇(容器布局)

st.columns

以并列方式插入容器。

插入若干并排排列的多元素容器,并返回一个容器对象列表。

要在返回的容器中添加元素,可以使用 with 符号(首选)或直接调用返回对象的方法。请参见下面的示例。

列只能放置在其他列的内部,最多只能嵌套一级。

注意

侧边栏中的栏目不能放在其他栏目内。只有在应用程序的主区域才可以这样做。

您可以使用 with 符号向列中插入任何元素: 

import streamlit as st

//设定3列
col1, col2, col3 = st.columns(3)

//设定不同的列标题和展示的内容
with col1:
   st.header("A cat")
   st.image("https://static.streamlit.io/examples/cat.jpg")

with col2:
   st.header("A dog")
   st.image("https://static.streamlit.io/examples/dog.jpg")

with col3:
   st.header("An owl")
   st.image("https://static.streamlit.io/examples/owl.jpg")

或者,你也可以直接调用返回对象的方法: 

import streamlit as st
import numpy as np

col1, col2 = st.columns([3, 1])
data = np.random.randn(10, 1)

col1.subheader("A wide column with a chart")
col1.line_chart(data)

col2.subheader("A narrow column with the data")
col2.write(data)

st.container

插入一个多元素容器。

在应用程序中插入一个不可见的容器,用于容纳多个元素。例如,这样您就可以在应用程序中不按顺序插入多个元素。

要向返回的容器中添加元素,可以使用 with 符号(首选),或者直接调用返回对象的方法。请看下面的示例。

#导入app包
import streamlit as st

#对容器进行设定,这个就是用with,
with st.container():
   st.write("This is inside the container")

   # 可用于接受 "类文件 "对象的任何地方:
   st.bar_chart(np.random.randn(50, 3))

st.write("This is outside the container")

不按顺序插入元素: 起始这里仅仅插入了一个容器,而容器内仅仅放入了文本信息,

import streamlit as st

#将边界设定为真,
container = st.container(border=True)
#在容器内写相应的文字
container.write("This is inside the container")
#外部容器
st.write("This is outside the container")

# 在容器内插入一些文字
container.write("This is inside too")

利用高度制作网格:

import streamlit as st
#设置行列
row1 = st.columns(3)
row2 = st.columns(3)
#遍历行列,并设置每一个容器的高度信息,宽度信息没有设定
for col in row1 + row2:
    tile = col.container(height=120)
#插入一个表情
    tile.title(":balloon:")

 使用高度为长内容创建滚动容器:

import streamlit as st

#选择一个文本信息,用于装入下面的容器
long_text = "Lorem ipsum. " * 1000

#这里我们设定一个高度为300的容器
with st.container(height=300):
    st.markdown(long_text)

 st.experimental_dialog

 用于创建模式对话框的函数装饰器。

使用 @st.experimental_dialog 装饰的函数将成为对话框函数。调用对话框函数时,Streamlit 会在应用程序中插入一个模式对话框。在对话框函数中调用的 Streamlit 元素命令会在模式对话框中呈现。

对话框函数在调用时可以接受参数。需要从更广泛的应用程序中访问的对话框中的任何值通常都应存储在会话状态中。

用户可以通过点击模式对话框外侧、点击右上角的 "X "或按键盘上的 "ESC "键来解除模式对话框。解除模式对话框不会触发应用程序的重新运行。要以编程方式关闭模态对话框,请在对话框函数中明确调用 st.rerun()。

st.experimental_dialog 继承了 st.experimental_fragment 的行为。当用户与对话框函数内创建的输入部件交互时,Streamlit 只重新运行对话框函数,而不是整个脚本。

不支持在对话框函数中调用 st.sidebar。

对话框代码可以与会话状态、导入模块以及在对话框外创建的其他 Streamlit 元素交互。请注意,这些交互会在多个对话框重新运行时叠加。您需要负责处理该行为的任何副作用。

 警告

一个对话框不能打开另一个对话框。一个脚本运行中只能调用一个对话框函数,这意味着在任何时候都只能打开一个对话框。

示例
下面的示例演示了 @st.experimental_dialog 的基本用法。在此应用程序中,点击 "A "或 "B "将打开一个模式对话框,提示您输入投票原因。在模式对话框中,点击 "提交 "将您的投票记录到会话状态并重新运行应用程序。这将关闭模式对话框,因为在重新运行全脚本时不会调用对话框功能。

import streamlit as st

#先设定一个标题
@st.experimental_dialog("Cast your vote")

#定义一个投票系统
def vote(item):
#写入问题,
    st.write(f"Why is {item} your favorite?")
    reason = st.text_input("Because...")
#这里如果点击发送就会展示
    if st.button("Submit"):
        st.session_state.vote = {"item": item, "reason": reason}
        st.rerun()
#这里定义初始界面,进行分析
if "vote" not in st.session_state:
    st.write("Vote for your favorite")
    if st.button("A"):
        vote("A")
    if st.button("B"):
        vote("B")
#这里我们将结果输入出你选的内容,并通过输入的的原因展示出来
else:
    f"You voted for {st.session_state.vote['item']} because {st.session_state.vote['reason']}"

弹出一个对话框 

 返回的结果

 

st.empty

插入单元素容器

在应用程序中插入一个容器,用于容纳单个元素。这样,您就可以在任意位置移除元素,或同时替换多个元素(使用子多元素容器)。

要在返回的容器中插入/替换/清除元素,可以使用符号或直接调用返回对象的方法。请看下面的示例。

 使用符号就地重写元素:

import streamlit as st
import time

with st.empty():
    for seconds in range(60):
        st.write(f"⏳ {seconds} seconds have passed")
        time.sleep(1)
    st.write("✔️ 1 minute over!")
import streamlit as st

placeholder = st.empty()

# 用一些文本替换占位符:
placeholder.text("Hello")

# 用图表替换文本:
placeholder.line_chart({"data": [1, 5, 2, 6]})

# 用几个元素替换图表:
with placeholder.container():
    st.write("This is one element")
    st.write("This is another")

# 清除所有这些元素:
placeholder.empty()

st.expander

插入一个可展开/折叠的多元素容器。

在应用程序中插入一个可容纳多个元素的容器,用户可以展开或折叠该容器。折叠时,可见的只是提供的标签。

要向返回的容器中添加元素,可以使用 with 符号(首选)或直接调用返回对象的方法。请看下面的示例。

警告

目前,您不能将扩展器放在另一个扩展器内。扩展器不能进行嵌套。

您可以使用 with 符号在扩展器中插入任何元素

import streamlit as st
#插入一个图表
st.bar_chart({"data": [1, 5, 2, 6, 2, 1]})

#设定一个扩张器在图表中
with st.expander("See explanation"):
    st.write('''
        The chart above shows some numbers I picked for you.
        I rolled actual dice for these, so they're *guaranteed* to
        be random.
    ''')
    st.image("https://static.streamlit.io/examples/dice.jpg")

或者,你也可以直接调用返回对象的方法:这种方法比较好,因为不需要担心对齐的问题,可以直接对expender进行写入。

import streamlit as st

st.bar_chart({"data": [1, 5, 2, 6, 2, 1]})

expander = st.expander("See explanation")
expander.write('''
    The chart above shows some numbers I picked for you.
    I rolled actual dice for these, so they're *guaranteed* to
    be random.
''')
expander.image("https://static.streamlit.io/examples/dice.jpg")

st.popover

插入一个弹出式容器。

插入一个多元素容器作为弹出窗口。它由一个类似按钮的元素和一个在点击按钮时打开的容器组成。

打开和关闭弹出窗口不会触发重新运行。与打开的弹出窗口内的部件进行交互将重新运行应用程序,同时保持弹出窗口打开。点击弹出窗口外的部件将关闭弹出窗口。

要在返回的容器中添加元素,可以使用 "with "符号(首选),或者直接调用返回对象的方法。请参阅下面的示例。

警告

不得将一个弹出窗口放在另一个弹出窗口内,并不能支持嵌套。

您可以使用 with 符号在弹出窗口中插入任何元素:

 

import streamlit as st

#用with 进行写入
with st.popover("Open popover"):
    st.markdown("Hello World 👋")
    name = st.text_input("What's your name?")

#不在内部写入
st.write("Your name:", name)

或者,你也可以直接调用返回对象的方法:

 

import streamlit as st

popover = st.popover("Filter items")
red = popover.checkbox("Show red items.", True)
blue = popover.checkbox("Show blue items.", True)

if red:
    st.write(":red[This is a red item.]")
if blue:
    st.write(":blue[This is a blue item.]")

 st.sidebar

 您不仅可以使用部件为应用程序添加交互性,还可以将它们组织到侧边栏中。可以使用对象符号和符号将元素传递给 st.sidebar。

以下两个代码段是等价的:

# Object notation
st.sidebar.[element_name]
# "with" notation
with st.sidebar:
    st.[element_name]

传递给 st.sidebar 的每个元素都会固定在左侧,让用户专注于应用程序中的内容。

提示
侧边栏可以调整大小!拖放侧边栏的右边界即可调整其大小!↔️

 下面举例说明如何在侧边栏中添加选择框和单选按钮:

import streamlit as st

# Using object notation
add_selectbox = st.sidebar.selectbox(
    "How would you like to be contacted?",
    ("Email", "Home phone", "Mobile phone")
)

# Using "with" notation
with st.sidebar:
    add_radio = st.radio(
        "Choose a shipping method",
        ("Standard (5-15 days)", "Express (2-5 days)")
    )

重要
不支持使用对象符号的元素只有 st.echo、st.spinner 和 st.toast。要使用这些元素,必须使用对象符号。

下面举例说明如何在侧边栏中添加 st.echo 和 st.spinner:

import streamlit as st

with st.sidebar:
    with st.echo():
        st.write("This code will be printed to the sidebar.")

    with st.spinner("Loading..."):
        time.sleep(5)
    st.success("Done!")

st.tabs

插入分隔成标签的容器。

以标签形式插入多个多元素容器。标签是一种导航元素,可让用户在相关内容组之间轻松移动。

要在返回的容器中添加元素,可以使用 with 符号(首选),或者直接调用返回对象的方法。请看下面的示例。tabs为列表中的每个字符串创建一个选项卡。默认情况下选择第一个标签页。字符串用作标签页的名称,可选择包含 Markdown,支持以下元素:粗体、斜体、删除线、内联代码、表情符号和链接。

警告

每个标签页的所有内容都会发送到前端并在前端呈现。目前不支持条件渲染。

 您可以使用 with 符号在制表符中插入任何元素:

import streamlit as st

#设定三个tab 这个相当于三个界面
tab1, tab2, tab3 = st.tabs(["Cat", "Dog", "Owl"])

#三个tab的设定
with tab1:
   st.header("A cat")
   st.image("https://static.streamlit.io/examples/cat.jpg", width=200)

with tab2:
   st.header("A dog")
   st.image("https://static.streamlit.io/examples/dog.jpg", width=200)

with tab3:
   st.header("An owl")
   st.image("https://static.streamlit.io/examples/owl.jpg", width=200)

或者,你也可以直接调用返回对象的方法:这里设定一个表格和数据 

import streamlit as st
import numpy as np

#这里设定两个tabs并按照列表形式传入
tab1, tab2 = st.tabs(["📈 Chart", "🗃 Data"])

#设定一个随机数列
data = np.random.randn(10, 1)

#设定第一个tab
tab1.subheader("A tab with a chart")
tab1.line_chart(data)
#设定第二个tab
tab2.subheader("A tab with the data")
tab2.write(data)

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/653508.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

想用Python做OCR?看看这篇文章

OCR是Optical Character Recognition的缩写,中文名为光学字符识别。它是一种通过计算机技术对图像或扫描文档中的文字进行识别和理解的过程。OCR技术可以将图像中的文字转换为可编辑、可搜索的文本,使得计算机能够理解和处理这些文字信息。 OCR技术通常…

【技术实操】银河高级服务器操作系统实例分享,达梦数据库服务器 oom 问题分析

1. 服务器环境以及配置 【 机型】 处理器: HUAWEIKunpeng 920 5220 内存: 400518528 kB 主板型号: Chaoqiang K620 series 整机类型/架构: ARM BIOS 版本: KL4.41.028.TF.220224.R 固件版本: KL4.41…

关于C++的IO流简单总结

基础IO流 C的IO以面向对象的形式实现, 同时兼容了C语言面向过程的IO方式 C 标准库提供了四个基本流对象: cin:用于从标准输入(通常是键盘)读取数据。 cout:用于向标准输出(通常是控制台)写入…

IGS 天线文件内容解读

文章目录 Part.I IntroductionChap.I 预备知识 Part.II 文件的下载Chap.I 下载地址Chap.II 文件类型 Part.III 文件内容解读Chap.I 文件头Chap.II 数据块说明Chap.III 数据块示例 Reference Part.I Introduction 本文将对 IGS 发布的天线文件 *.atx 进行一个简要的解读。 Chap…

QTreeWidget 详解

QTreeWidget 详解 QTreeWidget 是 PyQt5 框架中的一个重要部件,它提供了树形结构的视图,可以用于显示层级数据。以下是 QTreeWidget 的详细讲解,包括基本用法、主要方法和属性以及如何与其他组件进行交互。 基本用法 导入模块 要使用 QTree…

QListWidget详解

QListWidget详解 QListWidget 是 PyQt5 中一个方便的部件,用于创建和管理列表。它继承自 QListView,并提供了一些高级功能,使得添加和管理列表项更加简单。以下是 QListWidget 的详解,包括基本用法、主要方法和属性以及如何与其他…

安装PyTorch详细步骤

💥注意事项: CPU版和GPU版选一个进行安装即可 如果有Nvidia显卡,则安装cuda版本的PyTorch,如没有nvidia显卡,则安装cpu版。 目前常见的深度学习框架有很多,最出名的是:PyTorch(faceb…

hypack如何采集多波束数据?(下)

多波束测量模块 1)记录多波束和辅助传感器的数据; 2)显示实时改正后的数据和数据质量信息。 ​编辑​ 测量准备 1)设置大地测量参数和硬件设置; 2)计划测线 计划测线是一定间距的平行线,…

DuGa-DIT论文翻译

Dual Gated Graph Attention Networks with Dynamic Iterative Training for Cross-Lingual Entity Alignment 双门控图注意力网络与跨语言实体对齐的动态迭代训练 Abstract 近年来,跨语言实体对齐引起了相当大的关注。过去使用传统方法来匹配实体的研究都有一个…

传输大咖26|想找可替代FTP升级的国产信创软件?这个一定要看

​在这个信息技术飞速发展的时代,传统的文件传输协议FTP已经逐渐显露出它的局限性。特别是在安全性、传输效率和可扩展性方面,FTP似乎已经无法满足企业日益增长的需求。因此,寻找一款能够替代FTP的国产信创软件,成为了众多企业的迫…

8个Web组件库强烈推荐,大厂设计师的秘密武器

有TDesign、Arco Design、Ant Design、Material 随着Design等优秀web组件库的发布,设计师可能会认为大厂商之间的web组件库差别不大。其实大厂商的产品线很多,业务复杂。设计系统是对以往项目经验的深刻沉淀,可以支撑业务逻辑,保证…

如何本地 Debug React 源码

日常开发过程中,有时 debug react 源代码进行问题排查。一种方案是直接把通过 html 引入进来,另外一种是编译并通过 yarn 链接到项目中,本地将介绍如何通过这两种方法进行代码 Debug。 页面引入源代码方式 这种方式比较简单,直接…

【项目】教你手把手完成博客系统(三)显示用户信息 | 实现退出登录 | 实现发布博客

文章目录 教你手把手完成博客系统(三)7.实现显示用户信息1.约定前后端交互接口2.前端通过ajax发起请求3.服务器处理请求 8.实现退出登录1.约定前后端的接口2.前端发起请求3.服务器处理请求 9.实现发布博客1.约定前后端的交互接口2.前端构造请求3.服务器处…

前端面试问题:子组件的某一个方法调用执行逻辑由父组件的属性状态变化来决定

面试官:请你讲讲你在该项目中遇到的问题是什么?你怎么解决这个问题? 答:我的回答:该项目的实现过程中我确实遇到了问题:【我会给大家整理回答思路和角度,那那么遇到这样的问题也可借鉴这种思路…

RAG架构的数据准备流程

虽然现成的大型语言模型 (LLM) 功能强大,但企业发现,根据其专有数据定制 LLM 可以释放更大的潜力。检索增强生成 (RAG) 已成为这种定制的主要方法之一。RAG 模型将大型语言模型强大的语言理解能力与检索组件相结合,使其能够从外部数据源收集相…

[Redis]String类型

基本命令 set命令 将 string 类型的 value 设置到 key 中。如果 key 之前存在,则覆盖,无论原来的数据类型是什么。之前关于此 key 的 TTL 也全部失效。 set key value [expiration EX seconds|PX milliseconds] [NX|XX] 选项[EX|PX] EX seconds⸺使用…

官宣!马斯克的xAI获60亿美元融资,估值240亿美元

5月27日晚,马斯克旗下的大模型平台xAI在官网宣布获得60亿美元B轮融资,估值240亿美元。本次主要投资者包括Valor Equity Partners、红杉资本、国王控股、沙特王子-Bin Talal、Vy Capital等。 这也是大模型赛道史上最高单笔融资之一,超过Anthr…

安全基础二

一、插件漏洞 统计使用了哪些插件这些插件有版本更新嘛检测这些插件是否存在已知漏洞 二、权限提升和持久化 SSRF(Server-Side Request Forgery,服务器端请求伪造) 想象一下,你是一个公司的内部员工(服务器&#x…

主副坐标轴作图(即双坐标轴)

主副坐标轴显示: import numpy as np from matplotlib import pyplot as plt plt.rcParams[font.sans-serif][SimHei] plt.rcParams[axes.unicode_minus] False xnp.arange(0.1,10,0.01) data1np.exp(x) data2np.log(x) fig,ax1plt.subplots() #subplots一定要带s…

linux安装mysql后,配置mysql,并连接navicate软件

Xshell连接登陆服务器 输入全局命令 mysql -u root -p 回车后,输入密码,不显示输入的密码 注意mysql服务状态,是否运行等 修改配置文件my.cnf,这里没找到就找my.ini,指定有一个是对的 find / -name my.cnf 接下…