Open asehmi opened 1 year ago
Any news about this solicitation ? I'm trying to figure out a way to select only one node. Is there any workaround ?
Possible workaround:
if "selected" not in st.session_state:
st.session_state.selected = []
if "expanded" not in st.session_state:
st.session_state.expanded = []
selected = tree_select(tree, checked=st.session_state.selected, expanded=st.session_state.expanded)
if len(selected["checked"]) > 1:
st.session_state.selected = [x for x in selected["checked"] if x != st.session_state.selected[0]][0:1]
st.session_state.expanded = selected["expanded"]
st.experimental_rerun()
else:
st.session_state.selected = selected["checked"]
st.session_state.expanded = selected["expanded"]
@jonasrie Thank you for the workaround, it works!
Look forward to use this single select feature in the base package in future
@jonasrie Thank you for your code snippet, it works like a charm.
I had a small issue with the app reruning infinetly after expanding tree nodes an then selecting another node, so I added an update of st.session_state.expanded
to your work around:
if "selected" not in st.session_state:
st.session_state.selected = []
if "expanded" not in st.session_state:
st.session_state.expanded = []
selected = tree_select(tree, checked=st.session_state.selected, expanded=st.session_state.expanded)
if len(selected["checked"]) > 1:
st.session_state.selected = [x for x in selected["checked"] if x != st.session_state.selected[0]][0:1]
st.session_state.expanded = selected["expanded"]
st.rerun()
elif len(selected["expanded"]) != len(st.session_state.expanded):
st.session_state.expanded = selected["expanded"]
st.rerun()
else:
st.session_state.selected = selected["checked"]
st.session_state.expanded = selected["expanded"]
Hi,
I documented feature requests here: https://discuss.streamlit.io/t/new-component-streamlit-tree-select-a-simple-and-elegant-checkbox-tree/30195/10
Thanks, Arvindra