主要概念

neevop 十二月 3, 2023

概要

  1. Streamlit 应用程序是从上到下运行的 Python 脚本
  2. 每次用户打开指向您的应用程序的浏览器选项卡时,都会重新执行该脚本
  3. 当脚本执行时,Streamlit 在浏览器中实时绘制其输出
  4. 脚本使用 Streamlit 缓存来避免重新计算昂贵的函数,因此更新速度非常快
  5. 每次用户与小部件交互时,您的脚本都会重新执行,并且该小部件的输出值将在运行期间设置为新值。
  6. .pyStreamlit 应用程序可以包含多个页面,这些页面在文件夹中的单独文件中定义 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.sliderandst.sidebar.selectbox而不是st.sliderand 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_datast.cache_resource)之一来装饰它,每当调用该函数时,它都会检查两件事:

  1. 输入参数的值。
  2. 函数内部的代码。

它会运行该函数并将返回值存储在缓存中。下次使用相同的参数和代码调用该函数时(例如,当用户与应用程序交互时),Streamlit 将完全跳过执行该函数并返回缓存的值。

6. 网页

向现有应用程序添加更多页面,如下所示:

  1. 在包含主脚本的文件夹中,创建一个新pages文件夹。假设您的主脚本名为main_page.py.
  2. 在文件夹中添加新.py文件pages以向您的应用程序添加更多页面。
  3. 像往常一样运行streamlit run main_page.py

就是这样!该main_page.py脚本现在将对应于您的应用程序的主页。您将在侧边栏页面选择器中看到该文件夹中的其他脚本pages