一个能够搭建简单前端交互界面的python库。
该代码运行时需要在终端输入指令streamlit run your_st.py
相关api的介绍
首先,导入库
import streamlit as st
1、添加页面标题
st.title("hello world")
注意,每个页面只能有一个title,若是有多句st.title(),以最后一个为最终结果。
2、文本输入框
#此处用户的输入会被user_input变量存储,均为str类型
user_input = st.text_input("user_input:")
3、滑动条
#此处展示该函数承接了4个参数
#”description“:是对这个滑动条的介绍描述
# 1 表示最小值为1;20 表示最大值为20; 5 表示滑动条初始值为5
#此处user_input 为int类型
user_input = st.slider("description",1,20,5)
4、选择项
#[1,2,3,4]为你的选项设置
#例如选择语言['en','cn']
#此处user_input类型为你的选择项的类型
user_input = st.selectbox("description",[1,2,3,4])
5、按钮
#disabled = True表明该按钮无法按下,使用,默认为false
#按下 则clc = 1; 否则 clc = 0;
clc = st.button(label = "description", disabled = False)
6、上传文本
#type表示能够接收的文件类型
#key相当于整个文件接收框元件的“身份证”,不同的file_uploader()有不同的key
#accept_multiple_files bool参数,表明是否接收多个文件。
#其中uploaded_files是一个含file_uploader对象的列表
uploaded_files = st.file_uploader(
"选择一个或多个文件",
type=["csv", "txt", "xlsx", "json", "jpg", "jpeg", "png", "gif"],
key="file_uploader_1",
accept_multiple_files=True
)
控制位置参数api
利用sidebar将会使得文本上传框置于页面左侧
# 在侧边栏放置文件上传组件,允许上传多个文件
uploaded_files = st.sidebar.file_uploader(
"选择一个或多个文件",
type=["csv", "txt", "xlsx", "json", "jpg", "jpeg", "png", "gif"], # 新增图片文件类型
key="file_uploader_1",
accept_multiple_files=True
)
7、上传文件的展示与收缩框
- 其中text/csv是MIME类型表示法
- with st.expander(f"查看文件内容 - {uploaded_file.name}"):这是收缩框语句
import pandas as pd
uploaded_files = st.file_uploader(
"选择一个或多个文件",
type=["csv", "txt", "xlsx", "json", "jpg", "jpeg", "png", "gif"],
key="file_uploader_1",
accept_multiple_files=True
)
# 主内容区域
st.write("文件上传:")
if uploaded_files is not None:
for uploaded_file in uploaded_files:
# 处理文件
if uploaded_file.type == "text/csv":
df = pd.read_csv(uploaded_file)
with st.expander(f"查看数据预览 - {uploaded_file.name}"):
st.dataframe(df)
elif uploaded_file.type == "text/plain":
content = uploaded_file.read().decode("utf-8")
with st.expander(f"查看文件内容 - {uploaded_file.name}"):
st.text_area(f"文件内容 - {uploaded_file.name}", content, height=300)
elif uploaded_file.type == "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet":
df = pd.read_excel(uploaded_file)
with st.expander(f"查看数据预览 - {uploaded_file.name}"):
st.dataframe(df)
elif uploaded_file.type == "application/json":
data = pd.read_json(uploaded_file)
with st.expander(f"查看数据预览 - {uploaded_file.name}"):
st.dataframe(data)
elif uploaded_file.type in ["image/jpeg", "image/png", "image/gif"]:
# 显示图片
image = Image.open(uploaded_file)
with st.expander(f"查看图片 - {uploaded_file.name}"):
st.image(image, caption=uploaded_file.name, use_column_width=True)
8、分页展示tab
import streamlit as st
# 设置标题
st.title("选项卡示例")
# 创建选项卡
tabs = st.tabs(["首页", "使用方法", "模板预览"])
# 选项卡1的内容
with tabs[0]:
st.header("首页")
st.write("在这里可以放置任何内容,比如文本、图表或输入框。")
user_input_1 = st.text_input("输入一些文本:")
st.button("提交选项卡1")
# 选项卡2的内容
with tabs[1]:
st.header("这是选项卡2")
st.write("在这个选项卡中,您可以展示其他信息。")
user_input_2 = st.slider("选择一个值:", 0, 100)
st.button("提交选项卡2")
# 选项卡3的内容
with tabs[2]:
st.header("这是选项卡3")
st.write("在这里也可以放置更多内容。")
st.image("https://via.placeholder.com/300", caption="示例图片")
st.button("提交选项卡3")
9、对话框
- 这个没有明确的api接口实现,目前已经实现的一种方法就是使用st.session_state存储
import streamlit as st
import time # 模拟处理时间
# 模拟获取GPT响应的函数
def get_gpt_response(user_input):
time.sleep(1) # 模拟处理延迟
return f"这是您询问的问题的回答:{user_input}"
st.title("对话框示例")
# 初始化会话状态
if 'dialogue' not in st.session_state:
st.session_state.dialogue = []
# 用户输入框
user_input = st.text_input("请输入您的需求:")
#虽然没有while循环,但是能够一直输入,是因为这个是事件驱动
if st.button("提交"):
if user_input:
with st.spinner("正在生成回答..."):
response = get_gpt_response(user_input)
# 将用户输入和模型回答添加到对话历史
st.session_state.dialogue.append({"user": user_input, "gpt": response})
# 显示对话历史,只显示最新的 10 条
if st.session_state.dialogue:
for entry in st.session_state.dialogue[-10:]: # 仅显示最后 10 条对话
st.write(f"**用户**: {entry['user']}")
st.write(f"**GPT**: {entry['gpt']}")
注意:这里用户在输入行输入且点提交后,输入框的内容并没有自动清除,目前还没实现该功能。