由 neevop 十二月 3, 2023
概要
- Streamlit 应用程序是从上到下运行的 Python 脚本
- 每次用户打开指向您的应用程序的浏览器选项卡时,都会重新执行该脚本
- 当脚本执行时,Streamlit 在浏览器中实时绘制其输出
- 脚本使用 Streamlit 缓存来避免重新计算昂贵的函数,因此更新速度非常快
- 每次用户与小部件交互时,您的脚本都会重新执行,并且该小部件的输出值将在运行期间设置为新值。
.py
Streamlit 应用程序可以包含多个页面,这些页面在文件夹中的单独文件中定义pages
。
1. 运行
1.1 运行指令
# Running
python -m streamlit run your_script.py
# is equivalent to:
streamlit run your_script.py
1.2 重新运行
每次您想要更新应用程序时,请保存源文件。当您执行此操作时,Streamlit 会检测是否有更改并询问您是否要重新运行应用程序。选择屏幕右上角的“始终重新运行”,以便在每次更改源代码时自动更新您的应用程序。快速交互循环中工作。
1.3 数据流
每当屏幕上需要更新某些内容时,Streamlit 都会从上到下重新运行整个 Python 脚本。这可能在两种情况下发生:
- 每当您修改应用程序的源代码时。
- 每当用户与应用程序中的小部件交互时。例如,拖动滑块、在输入框中输入文本或单击按钮时。
@st.cache_data
装饰器,它允许开发人员在应用程序重新运行时跳过某些昂贵的计算。
2. 显示
2.1 数据框
您几乎可以将任何内容传递给st.write()
:文本、数据、Matplotlib 图形、Altair 图表等。不用担心,Streamlit 会解决这个问题并以正确的方式呈现
import streamlit as st
import pandas as pd
import numpy as np
dataframe = pd.DataFrame(
np.random.randn(10, 20),
columns=('col %d' % i for i in range(20)))
# 在不调用任何 Streamlit 方法的情况下写入应用程序
dataframe
# 绘制交互式表格的方法
st.dataframe(dataframe)
# 使用 Pandas Styler 对象突出显示交互式表中的某些元素
st.dataframe(dataframe.style.highlight_max(axis=0))
# 静态表生成的方法
st.table(dataframe)
2.2 折线图
使用 轻松地将折线图添加到您的应用程序中 st.line_chart()
import streamlit as st
import numpy as np
import pandas as pd
chart_data = pd.DataFrame(
np.random.randn(20, 3),
columns=['a', 'b', 'c'])
st.line_chart(chart_data)
2.3 组件
当您将数据或模型置于您想要探索的状态时,您可以添加st.slider()
、 st.button()
或 等 小部件st.selectbox()
。
import streamlit as st
import pandas as pd
import numpy as np
x = st.slider('x') # 👈 this is a widget
st.write(x, 'squared is', x * x)
st.text_input("Your name", key="name")
st.session_state.name # You can access the value at any point with:
@st.cache_data
def show_chart_data():
chart_data = pd.DataFrame(
np.random.randn(20, 3),
columns=['a', 'b', 'c'])
chart_data
if st.checkbox('Show dataframe'):
show_chart_data()
df = pd.DataFrame({
'first column': [1, 2, 3, 4],
'second column': [10, 20, 30, 40]
})
option = st.selectbox(
'Which number do you like best?',
df['first column'])
'You selected: ', option
3. 布局
3.1 边栏
左侧面板侧边栏中组织小部件 st.sidebar
。传递到的每个元素都 st.sidebar
固定在左侧。如果您想将选择框和滑块添加到侧边栏,请使用st.sidebar.slider
andst.sidebar.selectbox
而不是st.slider
and st.selectbox
:
import streamlit as st
# Add a selectbox to the sidebar:
add_selectbox = st.sidebar.selectbox(
'How would you like to be contacted?',
('Email', 'Home phone', 'Mobile phone')
)
# Add a slider to the sidebar:
add_slider = st.sidebar.slider(
'Select a range of values',
0.0, 100.0, (25.0, 75.0)
)
3.2 并排放置
st.columns
让您可以并排放置小部件
import streamlit as st
left_column, right_column = st.columns(2)
# You can use a column just like st.sidebar:
left_column.button('Press me!')
# Or even better, call Streamlit functions inside a "with" block:
with right_column:
chosen = st.radio(
'Sorting hat',
("Gryffindor", "Ravenclaw", "Hufflepuff", "Slytherin"))
st.write(f"You are in {chosen} house!")
3.3 进度
import streamlit as st
import time
'Starting a long computation...'
# Add a placeholder
latest_iteration = st.empty()
bar = st.progress(0)
for i in range(100):
# Update the progress bar with each iteration.
latest_iteration.text(f'Iteration {i+1}')
bar.progress(i + 1)
time.sleep(0.1)
'...and now we\'re done!'
4. 主题
配置部分中设置配置选项[theme]
来保存主题。为应用程序定义主题后,它将在主题选择器中显示为“自定义主题”,并且默认应用,而不是包含的浅色和深色主题。
尝试不同主题颜色的另一种方法是打开“保存时运行”选项,编辑 config.toml 文件,然后观察应用程序在应用新主题颜色的情况下重新运行。
5. 缓存
要在 Streamlit 中缓存函数,您需要使用两个装饰器(st.cache_data
和st.cache_resource
)之一来装饰它,每当调用该函数时,它都会检查两件事:
- 输入参数的值。
- 函数内部的代码。
它会运行该函数并将返回值存储在缓存中。下次使用相同的参数和代码调用该函数时(例如,当用户与应用程序交互时),Streamlit 将完全跳过执行该函数并返回缓存的值。
6. 网页
向现有应用程序添加更多页面,如下所示:
- 在包含主脚本的文件夹中,创建一个新
pages
文件夹。假设您的主脚本名为main_page.py
. - 在文件夹中添加新
.py
文件pages
以向您的应用程序添加更多页面。 - 像往常一样运行
streamlit run main_page.py
。
就是这样!该main_page.py
脚本现在将对应于您的应用程序的主页。您将在侧边栏页面选择器中看到该文件夹中的其他脚本pages
。