【发布时间】:2020-12-02 03:33:18
【问题描述】:
我有两个允许用户选择的输入字段
- ID,在数字输入中
- (排序后的)名称,在选择框中
更改一个输入字段应该更新另一个以保持同步。
您如何使用 streamlit 实现该行为?
到目前为止我尝试了什么
选择ID -> 更新名称选择框:
users = [(1, 'Jim'), (2, 'Jim'), (3, 'Jane')]
users.sort(key=lambda user: user[1]) # sort by name
selected_id = st.sidebar.number_input('ID', value=1)
options = ['%s (%d)' % (name, id) for id, name in users]
index = [i for i, user in enumerate(users) if user[0] == selected_id][0]
selected_option = st.sidebar.selectbox('Name', options, index)
选择名称 -> 更新 ID 号输入(使用 st.empty()):
users = [(1, 'Jim'), (2, 'Jim'), (3, 'Jane')]
users.sort(key=lambda user: user[1]) # sort by name
id_input = st.sidebar.empty()
options = ['%s (%d)' % (name, id) for id, name in users]
selected_option = st.sidebar.selectbox('Name', options)
# e.g. get 2 from "Jim (2)"
id = int(re.match(r'\w+ \((\d+)\)', selected_option).group(1))
selected_id = id_input.number_input('ID', value=id)
【问题讨论】: