如何在 Streamlit 中获得正确启用/禁用的按钮?下面的当前代码适用于 1 单击延迟(不需要)。
所需的操作 - 单击“button_a”时启用“button_c”,单击“button_b”时禁用“button_c”。
当前操作--在单击button_a然后单击任何其他按钮后启用button_c,或者在单击button_b然后单击任何其他按钮后禁用。
import streamlit as st
if 'but_a' not in st.session_state:
st.session_state.disabled = True
button_a = st.button('a', key='but_a')
button_b = st.button('b', key='but_b')
button_c = st.button('c', key='but_c', disabled=st.session_state.disabled)
st.write(button_a, button_b, button_c)
if button_a:
st.write("clicked A")
st.session_state.disabled = False
if button_b:
st.write('clicked B')
st.session_state.disabled = True
最佳答案
我认为所有问题都是当您按下任何按钮时它会再次运行所有代码,并再次创建所有按钮,并且您必须在创建 button_c
之前更改状态。
if button_a:
st.session_state.disabled = False
if button_b:
st.session_state.disabled = True
button_c = st.button('c', key='but_c', disabled=st.session_state.disabled)
完整的工作代码:
import streamlit as st
if 'but_a' not in st.session_state:
st.session_state.disabled = True
print('before:', st.session_state)
button_a = st.button('a', key='but_a')
button_b = st.button('b', key='but_b')
# change state before creating button `c` (but after creating button `a` and `b`)
if button_a:
st.session_state.disabled = False
if button_b:
st.session_state.disabled = True
button_c = st.button('c', key='but_c', disabled=st.session_state.disabled)
st.write(button_a, button_b, button_c)
# display text after displaying all buttons
if button_a:
st.write("clicked A - Activate C")
if button_b:
st.write("clicked B - Deactivate C")
print('after:', st.session_state)
关于python - Streamlit 按钮更改禁用状态,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/73882954/