用streamlit做问卷调查的示例代码
import glob
import streamlit as st
st.title('test session state')
@st.cache_data
def get_images():
qa_survey_dir="/comp_robot/mazhengyu/codes/question_survey/sample_images"
uploaded_files=glob.glob(qa_survey_dir+"/*.jpg")
byte_imgs=[]
for i in uploaded_files:
with open(i, 'rb') as file:
byte_imgs.append(file.read())
#base64_imgs = [base64.b64encode(i).decode('utf-8') for i in byte_imgs]
return byte_imgs
@st.cache_data #意味着不会执行该函数,但是会返回该函数的缓存值
def get_indx(user_name):
print(f"{user_name}ind usr_name just only once")
st.session_state.n= 0
st.session_state[f'{user_name}_rank']=[]
st.session_state[f'{user_name}_index']=[]
if 'n' not in st.session_state:
st.session_state.n = 0
if 'submit_button' not in st.session_state:
st.session_state.submit_button = False
def callback_btn2():
if f'{user_name}_rank' not in st.session_state:
st.session_state[f'{user_name}_rank']=[]
st.session_state[f'{user_name}_index']=[]
st.session_state[f'{user_name}_rank'].append(subject_rank)
st.session_state[f'{user_name}_index'].append(st.session_state.n)
st.session_state.n += 1
st.session_state.submit_button=True
st.button(f'提交', on_click=callback_btn2) #{st.session_state.n}
print("st.session_state.n:",st.session_state.n)
if 'submit_button' not in st.session_state:
st.session_state.submit_button = False
byte_imgs=get_images()
_, cl_middle_title, _ = st.columns([2, 4, 1])
with cl_middle_title:
st.title("roc question survey")
output, cl_middle, caption = st.columns([1, 3, 1])
#st.session_state['uploaded_file'] = None
with caption:
user_name=st.text_input('输入用户名', value='')
subject_rank=st.selectbox('选择rank等级,1代表完全不相关,2代表有歧义,可能相关,3代表正确', \
[1,2,3], index=1)
#st.button('提交',on_click=callback_btn2)
num=len(byte_imgs)
get_indx(user_name)
placeholder = st.empty()
with cl_middle:
with placeholder.container( border=False): #height=580,
if(f'{user_name}_rank' in st.session_state and len(st.session_state[f'{user_name}_rank'])>=num):
# st.session_state[f'{user_name}_rank']=[]
# st.session_state[f'{user_name}_index']=[]
f=open(user_name+".txt","w")
rank_str=[str(i) for i in st.session_state[f'{user_name}_rank']]
index_str=[str(i) for i in st.session_state[f'{user_name}_index']]
f.writelines(rank_str)
f.writelines(index_str)
f.close()
st.title("You'are done perfectly!!!")
else:
st.image(byte_imgs[st.session_state.n])
界面长这样:
如果完成所有的问卷问题之后:
然后会以用户名.txt作为文件名保存该用户的所有的评测结果
原文地址:https://blog.csdn.net/weixin_39326879/article/details/142755850
免责声明:本站文章内容转载自网络资源,如本站内容侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!