多选/选择框在第一次选择后不等待 - Streamlit

Posted

技术标签:

【中文标题】多选/选择框在第一次选择后不等待 - Streamlit【英文标题】:Multiselect/Selectbox doesn’t wait after first selection - Streamlit 【发布时间】:2021-08-16 05:24:07 【问题描述】:

全部,

我之前成功地使用了多选,但是当我尝试这个我作为 POC 尝试的特定示例时,行为非常奇怪。本质上,我想做的是使用多选让应用程序在中间步骤等待用户输入。但是,多选不会等待我选择我想要选择的输入,只要我选择了一个东西,它就会运行,甚至不能正确执行。有人可以指导我做错什么吗?我使用的是 0.82 版本。

我也使用 selectbox 进行了相同的测试,并且看到了相同的行为。

所以,这就是我所拥有的:

import streamlit as st
import pandas as pd
def basic_skeleton() -> tuple:
    """Prepare the basic UI for the app"""
    st.sidebar.title('User Inputs')
    beta_expander = st.sidebar.beta_expander("Upload csv")
    with beta_expander:
        user_file_path = st.sidebar.file_uploader(
            label='Random Data',
            type='csv'
        )
    return user_file_path
def get_filtered_dataframe(df) -> pd.DataFrame:
    columns_list = df.columns
    with st.form(key='Selecting Columns'):
        columns_to_aggregate = st.selectbox(
            label='Select columns to summarize',
            options=columns_list
        )
        submit_button = st.form_submit_button(label='Submit')
    if submit_button:
        df1 = df[columns_to_aggregate]
        return df1
def main():
    """Central wrapper to control the UI"""
    # add title
    st.header('Streamlit Testing')
    # add high level site inputs
    user_file_path = basic_skeleton()
    load = st.sidebar.button(label='Load Data')
    if load:
        df = pd.read_csv(user_file_path)
        st.dataframe(df)
        clean_df = get_filtered_dataframe(df)
        run = st.button("Aggregate Selected columns")
        if run:
            result = clean_df.describe(include='all')
            st.dataframe(result)
main()

【问题讨论】:

【参考方案1】:

streamlit 社区的一位用户帮助回答了这个问题。我想确定一下,这里提供了答案,所以这里也提供了任何来寻找的人:

import streamlit as st
import pandas as pd

def basic_skeleton() -> tuple:
    """Prepare the basic UI for the app"""
    st.sidebar.title('User Inputs')
    beta_expander = st.sidebar.beta_expander("Upload csv")
    with beta_expander:
        user_file_path = st.sidebar.file_uploader(
            label='Random Data',
            type='csv'
        )
    return user_file_path

def get_filtered_dataframe(df):
    columns_list = df.columns
    with st.form(key='Selecting Columns'):
        columns_to_aggregate = st.multiselect(
            label='Select columns to summarize',
            options=columns_list
        )
        submit_button = st.form_submit_button(label='Submit')
    if submit_button:
        df1 = df[columns_to_aggregate]
        return df1

def main():
    """Central wrapper to control the UI"""
    # add title
    st.header('Streamlit Testing')

    # add high level site inputs
    user_file_path = basic_skeleton()
    if user_file_path:
        load = st.sidebar.checkbox(label='Load Data')

        if load:
            df = pd.read_csv(user_file_path)
            st.dataframe(df)
            clean_df = get_filtered_dataframe(df)

            if clean_df is not None:
                result = clean_df.describe()
                st.dataframe(result)

main()

【讨论】:

您能否解释一下避免这种行为所需的代码更改

以上是关于多选/选择框在第一次选择后不等待 - Streamlit的主要内容,如果未能解决你的问题,请参考以下文章

防止多选框在移动浏览器上的多选框中不更改

多选选择相同的选项

如何在ios中选择多选图像

下拉框多选框单选框 通过TagHelper绑定数据

对集合进行并行计算方法选择的建议:stream的并行流,CompletableFuture

多选的快捷键是啥