How can I read the value of selected index instead selected text on a radio button?

How can I read the value of selected index instead selected text on a radio button?

Steps to reproduce

Code snippet:

 import streamlit as st

genre = st.radio(
    "What's your favorite movie genre",
    [":rainbow[Comedy]", "***Drama***", "Documentary :movie_camera:"],
    index=0,
)

st.write("You selected:", genre) 

st.write(“You selected:”, genre) → this line will print the selected text - however, can I get read the selected value/index - of the selected text?

Regards,
Ninad

1 Like

Hi @Ninad_Jagtap,

While the st.radio function doesn’t directly provide the selected index value, you can use Python’s index() method on the list of options.

import streamlit as st

options = [":rainbow[Comedy]", "***Drama***", "Documentary :movie_camera:"]
genre = st.radio(
    "What's your favorite movie genre?",
    options,
    index=0,
)

st.write("You selected:", genre)
selected_index = options.index(genre)
st.write(f"Index of the selected genre is: {selected_index}")

Now, when you select an option, Streamlit will print both the selected genre and its index.

Recording 2023-09-27 at 09.53.47

Is this what you were looking for?

Best,
Charly

1 Like

One possible way is using the indexes as options, then use the format_func argument to st.radio() to set the labels in the dropdown.

format_func (function)

Function to modify the display of radio options. It receives the raw option as an argument and should output the label to be shown for that option. This has no impact on the return value of the radio.

labels = [":rainbow[Comedy]", "***Drama***", "Documentary :movie_camera:"]

genre = st.radio(
    label="What's your favorite movie genre",
    options= range(len(labels)),
    format_func=labels.__getitem__,
    index=0,
)

st.write("You selected:", genre)
5 Likes

Thanks, Goyo!

I like that workaround!

Best,
Charly

Thanks Charly

1 Like

Thanks Goyo

Very welcome!

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