Streamlit on_click

Hello streamlit community,
i have a play local application that I’m trying to understand the interactions within streamlit.

import streamlit as st
def click_snow():
    st.snow()

with st.chat_message("user", avatar=":material/ac_unit:"):
    st.button("", key=-1, on_click=click_snow())

why does changing click_snow() to click_snow fix the problem of click_snow() triggering on page reload/load even though I didn’t click the button?

what is the intention behind the difference in name/calling?

Hello,
When you write click_snow(), you’re actually calling the function right away. This means the function click_snow is executed immediately when the page is loaded, which is why you see the snow effect as soon as the page reloads.

  • click_snow() → Calls the function immediately and triggers the snow effect.
  • click_snow → This is just passing the function itself (without calling it), allowing another part of the code (in this case, the button click) to decide when to actually run the function.

The behavior you’re seeing is actually a common pattern in Python, not specific to Streamlit. :slight_smile:

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