用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作为文件名保存该用户的所有的评测结果

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值