如何为Streamlit data_editor添加动态标签列?
实现Streamlit Data Editor的动态标签列
当然可行,你可以通过自定义Streamlit Data Editor的列配置,将st_tags组件嵌入到指定列中,实现每行可单独增删标签的效果。
修改后的完整代码
import streamlit as st import pandas as pd from streamlit_tags import st_tags # 初始化原始数据,添加空的keywords列 df = pd.DataFrame( [ {"command": "st.selectbox", "rating": 4, "is_widget": True, "keywords": []}, {"command": "st.balloons", "rating": 5, "is_widget": False, "keywords": []}, {"command": "st.time_input", "rating": 3, "is_widget": True, "keywords": []}, ] ) # 自定义标签列的编辑器,row_index用于生成唯一组件key def tag_editor(cell_value, row_index): return st_tags( label="", text="按回车添加标签", value=cell_value, suggestions=['five', 'six', 'seven', 'eight', 'nine', 'three', 'eleven', 'ten', 'four'], maxtags=4, key=f"tag_{row_index}" ) # 配置Data Editor的列 edited_df = st.data_editor( df, column_config={ "keywords": st.column_config.Column( "关键词", editor=tag_editor, width="medium" ) }, use_container_width=True ) # 查看编辑后的结果 st.subheader("编辑后的数据") st.dataframe(edited_df)
关键说明
- 初始化标签列:先给原始DataFrame新增一个
keywords列,初始值设为空列表,作为标签存储的载体 - 自定义标签编辑器:定义
tag_editor函数,将st_tags组件包装成Data Editor支持的编辑器。利用row_index参数为每行的标签组件生成唯一key,避免Streamlit组件的key冲突问题 - 配置Data Editor列:在
column_config中指定keywords列使用自定义的tag_editor,同时设置列名和显示宽度
实现后效果如下:
内容的提问来源于stack exchange,提问作者apprunner2186
相关产品推荐
相关产品推荐

