St.dialog will not display when too many button on the page

My project uses tables to display data, with 50 records per page and multiple buttons per row to trigger dialog to edit or delete the record. However, after the first dialog appears, clicking the buttons later, the dialog will most likely not display, how to avoid this issue? thanks.

you can reproduce the issue with the following code:

import streamlit as st

COLUMN_TITLE = ['col1' ,'col2' ,'col3' ,'col4' ,'col5' ,'col6' ,'col7']

COLUMN_SPEC=[1 ,1 ,1 ,1 ,1 ,1 ,1]

@st.dialog(title="test")
def show_media_play_dialog():
    st.write("hello world!")

with st.container():
    for x in range(50):
        for col, field_name in zip(st.columns(COLUMN_SPEC), COLUMN_TITLE):
            col.button(f"show dialog",key=f"{field_name}_test_{x}", on_click=show_media_play_dialog)

python version is 3.10, streamlit 1.37.0

1 Like

Hey,
Same problem with 1.36 with your code.

fix it with : (but it’s not so much compact, the callback is doing a weird thing)

        COLUMN_TITLE = ['col1', 'col2', 'col3', 'col4', 'col5', 'col6', 'col7']

        COLUMN_SPEC = [1, 1, 1, 1, 1, 1, 1]
        @st.experimental_dialog('test')
        def show_media_play_dialog():
            st.write("hello world!")

        # Initialize state
        if 'dialog_shown' not in st.session_state:
            st.session_state['dialog_shown'] = False

        def on_button_click():
            st.session_state['dialog_shown'] = True

        with st.container():
            for x in range(50):
                for col, field_name in zip(st.columns(COLUMN_SPEC), COLUMN_TITLE):
                    col.button(f"show dialog", key=f"{field_name}_test_{x}", on_click=on_button_click)

        # Show the dialog if the state is True
        if st.session_state['dialog_shown']:
            show_media_play_dialog()
            st.session_state['dialog_shown'] = False

Little update after some tests :
More than 70 buttons, it start to have some problem with the callback.
100 not working anymore.

thanks for update, based on your suggestion, there has been some improvement compared to before, but the issue still exist.

This topic was automatically closed 180 days after the last reply. New replies are no longer allowed.