Tabs for Filters/Facets

Hi there! I’m looking for some guidance as I’m new to Streamlit and haven’t found exactly what I need in the available Streamlit and community components.

I’m designing an e-commerce search page on Streamlit. The goal is to display selected filters (facets) as tags at the top of the page, allowing users to easily see and remove filters by deleting the corresponding tags. Here’s an example screenshot from an e-commerce website to illustrate this feature.

In my search, I found:

streamlit-tags: While it allows tag display, it’s designed more for user input. Users can manually add tags, which could lead to unwanted behavior.

StreamlitAntdComponents: This provides closeable tags, but the tags don’t seem to support callbacks, so they don’t respond to user actions.

I’d appreciate any advice on how you might implement this functionality. Attached is a screenshot of my current Streamlit app. Thanks for the help!

Hi @Luca2, welcome to the forum!
Have you tried st.multiselect - Streamlit Docs? It seems like that would work well for this use case.

Hi @blackary ,

I tried using st.multiselect (see the bottom of the screenshot), but it looks like the tags aren’t able to handle longer labels, so the text gets cut off.

Hi @Luca2 ,

You can modify that by this simple function. This allows for longer text in the multiselect.

def show_longer_text_in_multiselect():
    """Show longer bits of text in streamlit multiselect items."""
  st.markdown(
      """
      <style>
          .stMultiSelect [data-baseweb=select] span{
              max-width: 250px;
          }
      </style>
      """,
      unsafe_allow_html=True,
  )
  # next to max-width, you can add <font-size: 0.6rem;> to change font size

Just change the 250 to how many it needs to be for your application.
Then, just call this function once at the start of your script or page.
Hopefully this helps!

Cheers,
Dirk

@DirkRemmers
Thanks, it worked perfectly! If there’s a way to disable the options dropdown entirely, that would be ideal :slight_smile: