python 将代码的不同部分分配给streamlit应用程序中的st.按钮

oxf4rvwz  于 2023-03-11  发布在  Python
关注(0)|答案(1)|浏览(142)

我正在构建一个streamlit应用程序,我定义了3个按钮。我有一个做不同事情的代码集。如果用户选择button1,它会做一些事情,如果用户选择button2,它应该执行代码的其他部分,并做一些其他事情。
我正在处理两个问题:
1-当我选择button2,然后选择slider,或者改变st.sidebar.checkbox中的选项时,这些都是在if中定义的,它什么也不做。
2-如何定义button2下的数据框,button2下的数据框也可以在button3下调用?
3-如果我在if button2之外定义slider和st.sidebar.checkbox,则1的问题将得到解决,但在if button2之外的内容也将显示在if button1中。
你能帮我进一步开发这个代码吗?

import streamlit as st

col1, col2, col3 = st.columns([.4,.5,1])

m = st.markdown("""
<style>
div.stButton > button:first-child {
    background-color: rgb(0,250,154);
}
</style>""", unsafe_allow_html=True)

with col1:
    button1 = st.button('In')

with col2:
    button2 = st.button('DA')

with col3:
    button3 = st.button('Vi')

if button1:
    write some intro text
if button2:
    a data frame is generated here
    there is slider and st.sidebar.checkbox defined in this part.
if button3:
    use the data frame generated in button2 and plot
h9vpoimq

h9vpoimq1#

您可能会改用st.tabsst.cache_data

import streamlit as st
import pandas as pd

tab1, tab2, tab3 = st.tabs(["In", "Da", "Vi"])

@st.cache_data()
def create_dataframe(slider_val):
    # This pretends it's a long computation..
    import time
    time.sleep(5)
    return pd.DataFrame({"aa": [slider_val]})

def show_dataframe(df):
    st.dataframe(df)

with tab1:
    st.header("In")
    st.image("https://static.streamlit.io/examples/cat.jpg", width=200)

with tab2:
    st.header("DA")

    slider_val = st.slider("Foobar", 0, 30, step=10)
    st.write(f"slider_val: {slider_val}")

    df = create_dataframe(slider_val)

with tab3:
    st.header("Vi")
    show_dataframe(df)

它提供3个选项卡:
第一节第一节第一节第一节第一节第二节第一节
请参阅此处的st.tabs文档:https://docs.streamlit.io/library/api-reference/layout/st.tabs

相关问题