Skip to main content

未提供项目描述

项目描述

Streamlit 火灾状态

流光应用 pypi版本

在多页面流式应用程序中,最令人头疼的问题之一是,如果您在页面之间切换,您的状态不会被保留。

这就是为什么火状态在这里为您服务。

安装

pip install fire-state

快速开始

在表单中保持状态

import streamlit as st
from fire_state import create_store, form_update

# Register state with initiate values in a slot
slot = "home_page"
key1, key2 = create_store(slot, [
    ("state1", 5),
    ("state2", 12),
])

# Now create a form using the generated keys
with st.form("my form"):
    st.slider("State 1", 1, 10, step=1, key=key1)
    st.slider("State 1", 10, 20, step=1, key=key2)
    st.form_submit_button(label="Submit", on_click=form_update, args=(slot,))

在页面之间切换时,会保留状态。

在任何地方保持状态

您需要使用该set_state功能自己控制状态。

import streamlit as st
from fire_state import create_store, get_state, set_state


slot = "home_page"
create_store(slot, [
    ("state1", 0),
])

def increment():
    prev = get_state(slot, "state1")
    set_state(slot, ("state1", prev + 1))


st.button("+1", on_click=increment)
st.text(f"Value: {get_state(slot, 'state1')}")

高级用法

表单提交后保持状态

在这个例子中,我们有一个表单来控制如何绘制折线图。

让我们先做一些设置

import numpy as np
import pandas as pd
import streamlit as st

np.random.seed(0)

@st.cache
def chart_data(line_count, data_size):
    return pd.DataFrame(
        np.random.randn(data_size, line_count),
        columns=np.random.choice(list('abcdefghijlkmn'), line_count))

现在我们可以使用火状态来记录用户动作。

这个想法是,用户第一次打开页面时,他们从来没有点击过运行按钮,所以他们点击一个按钮的次数是 0。当它不再是 0 时,这意味着用户点击了它。因此,绘图被渲染或更新(如果图表数据被更改)。

from fire_state import create_store, get_state, set_state, form_update

PAGE_SLOT = "Home_Page"
key1, key2, key3 = create_store(PAGE_SLOT, [
    ("line_count", 2),
    ("data_size", 13),
    ("run", 0)
])

with st.form(key="a form"):
    line_count = st.slider("Line Count", 1, 10, step=1, key=key1)
    data_size = st.slider("Data Size", 10, 20, step=1, key=key2)
    run = st.form_submit_button(label="Run", on_click=form_update, args=(PAGE_SLOT,))

prev_run_state = get_state(PAGE_SLOT, 'run')
if (prev_run_state != 0) or run:
    data = chart_data(line_count, data_size)
    st.line_chart(data)
    # increase by 1 every time user click it
    set_state(PAGE_SLOT, ("run", prev_run_state + 1))

重置状态

使用set_store函数批量更新状态:

import streamlit as st
from fire_state import create_store, \
    get_store, set_store, \
    get_state, set_state

slot = "page"
init_state = [
    ("state1", 1),
    ("state2", 2),
    ("state3", 3),
]
create_store(slot, init_state)

def reset():
    set_store(slot, init_state)

st.button("Reset", on_click=reset)

和函数允许您批量修改set_storeget_store获取您的状态。

状态的生命周期

如果您不关闭或刷新页面,该状态将持续存在。仅当您停止应用程序时,状态实例才会被销毁。

项目详情


下载文件

下载适用于您平台的文件。如果您不确定要选择哪个,请了解有关安装包的更多信息。

源分布

fire-state-0.1.1.tar.gz (5.1 kB 查看哈希)

已上传 source

内置分布

fire_state-0.1.1-py3-none-any.whl (4.9 kB 查看哈希)

已上传 py3