Spaces:
Runtime error
Runtime error
| import streamlit as st | |
| from process import process_choice,process_other, generate_image, analyze_post | |
| # 定义问题列表 | |
| QUESTIONS = [ | |
| "Question1: Are you usually?", | |
| "Question2: Among your friends, you are?", | |
| "Question3: In doing something that many other people do, you would rather?", | |
| "Question4: Do you admire the people who are?", | |
| "Question5: Do you more often let?", | |
| "Question6: Do you usually?", | |
| "Question7: When you go somewhere for the day, you would rather", | |
| "Question8: When you have a special job to do, you like to" | |
| ] | |
| OPTIONS = { | |
| QUESTIONS[0]: ["A 'Good Mixer with groups of people", "Rather quiet and reserved"], # Extrovert (E) vs. Introvert (I) | |
| QUESTIONS[1]: ["Full of news about everybody", "One of the last to hear what is going on"], #Extrovert (E) vs. Introvert (I) | |
| QUESTIONS[2]: ["Invent a way of your own", "Do it in the accepted way "], #Intuition, Sensing | |
| QUESTIONS[3]: ["Normal-acting to never make themselves the center of attention", "Too original and individual to care whether they are the center of attention or not"],# Sensing, Intuition | |
| QUESTIONS[4]: ["Your heart rule your head", "Your head rule your heart"], ## Feeling, Thinking | |
| QUESTIONS[5]: ["Value emotion more than logic", "Value logic more than feelings"], # Thinking, Feeling | |
| QUESTIONS[6]: ["Plan what you will do and when", "Just go"], # Judging, Perceiving | |
| QUESTIONS[7]: ["Organize it carefully before you start", "Find out what is necessary as you go along"] # Judging, Perceiving | |
| } | |
| def main(): | |
| # 页面选择 | |
| page = st.sidebar.radio("Choose Test Method", ["Questionnaire", "Post upload"]) | |
| if page == "Questionnaire": | |
| questionnaire() | |
| elif page == "Post upload": | |
| post() | |
| def questionnaire(): | |
| custom_css = """ | |
| <style> | |
| body { | |
| font-family: Arial, Helvetica, sans-serif; | |
| } | |
| h1 { | |
| font-size: 52px; | |
| } | |
| h2 { | |
| color: #4A90E2; | |
| font-size: 36px; | |
| } | |
| label[data-baseweb="radio"] div[data-testid="stMarkdownContainer"] p { | |
| font-size: 20px !important; | |
| line-height: 24px !important; | |
| margin-top: 5px !important; | |
| } | |
| label[data-baseweb="radio"] .st-c9 { | |
| margin-top: 8px !important; | |
| } | |
| .question-text { | |
| font-size: 30px; | |
| font-weight: bold; | |
| margin-bottom: 20px; | |
| } | |
| </style> | |
| """ | |
| st.markdown(custom_css, unsafe_allow_html=True) | |
| st.title("MBTI Personality Insight") | |
| st.markdown(""" | |
| <p style='font-size:20px'> | |
| Discover deeper insights about your Myers-Briggs Type Indicator (MBTI) personality through this interactive questionnaire. | |
| If the options couldn't describe you, customize your answers. | |
| </p> | |
| """, unsafe_allow_html=True) | |
| # 使用session_state来跟踪当前的问题索引 | |
| if "current_question_index" not in st.session_state: | |
| st.session_state.current_question_index = 0 | |
| # 初始化两个答案字典 | |
| if "answers_choices" not in st.session_state: | |
| st.session_state.answers_choices = {} | |
| if "answers_other" not in st.session_state: | |
| st.session_state.answers_other = {} | |
| # 显示当前问题,使用Markdown增大字体并添加额外的空间' | |
| cols = st.columns([4, 1]) | |
| # 在左侧列显示问题 | |
| current_question = QUESTIONS[st.session_state.current_question_index] | |
| cols[0].markdown(f'<div class="question-text">{current_question}</div>', unsafe_allow_html=True) | |
| option_a, option_b = OPTIONS[current_question] | |
| cols[0].markdown('<div class="custom-radio">', unsafe_allow_html=True) | |
| selected_option = cols[0].radio("", [option_a, option_b, "Not Listed? Enter Your Own"]) | |
| cols[0].markdown('</div>', unsafe_allow_html=True) | |
| user_answer = None | |
| with st.container(): | |
| st.markdown("---") | |
| if selected_option == "Not Listed? Enter Your Own": | |
| # 使用.get()方法获取值,并在键不存在时提供一个默认值 | |
| default_value = st.session_state.answers_other.get(st.session_state.current_question_index, "") | |
| user_answer = st.text_input("Please write your answer:", default_value) | |
| else: | |
| user_answer = selected_option | |
| # 清除按钮 | |
| if cols[1].button("Clear ALL"): | |
| st.session_state.current_question_index = 0 | |
| st.session_state.answers_choices.clear() | |
| st.session_state.answers_other.clear() | |
| st.experimental_rerun() | |
| # 首个问题 | |
| elif st.session_state.current_question_index == 0: | |
| if st.button("Next"): | |
| if selected_option == "Not Listed? Enter Your Own": | |
| st.session_state.answers_other[current_question] = user_answer | |
| else: | |
| st.session_state.answers_choices[current_question] = user_answer | |
| st.session_state.current_question_index += 1 | |
| st.experimental_rerun() | |
| # 最后一个问题 | |
| elif st.session_state.current_question_index == len(QUESTIONS) - 1: | |
| cols = st.columns([1, 1, 1]) | |
| prev_button, _, submit_button = cols | |
| if prev_button.button("Prev"): | |
| st.session_state.current_question_index -= 1 | |
| st.experimental_rerun() | |
| elif submit_button.button("Submit"): | |
| if selected_option == "Not Listed? Enter Your Own": | |
| st.session_state.answers_other[current_question] = user_answer | |
| else: | |
| st.session_state.answers_choices[current_question] = user_answer | |
| final0 = process_choice(st.session_state.answers_choices) | |
| final1 = process_other(st.session_state.answers_other) | |
| final = {key: final0[key]+ final1[key] for key in set(final0) | set(final1)} | |
| generate_image(final) | |
| # 中间的问题 | |
| else: | |
| cols = st.columns([1, 1, 1]) | |
| prev_button, next_button, _ = cols | |
| if prev_button.button("Prev"): | |
| st.session_state.current_question_index -= 1 | |
| st.experimental_rerun() | |
| elif next_button.button("Next"): | |
| if selected_option == "Not Listed? Enter Your Own": | |
| st.session_state.answers_other[current_question] = user_answer | |
| else: | |
| st.session_state.answers_choices[current_question] = user_answer | |
| st.session_state.current_question_index += 1 | |
| st.experimental_rerun() | |
| def post(): | |
| # 设置页面标题 | |
| st.title("MBTI Personality Insight") | |
| st.markdown(""" | |
| <p style='font-size:20px'> | |
| Upload posts to get insights about MBTI personality analysis. | |
| </p> | |
| """, unsafe_allow_html=True) | |
| # 创建文本输入框 | |
| user_input = st.text_area("Enter your post here:") | |
| # 创建提交按钮 | |
| if st.button("Submit"): | |
| # 在这里调用你的文本分析函数 | |
| final = analyze_post(user_input) # 假设你有一个analyze_text函数来进行文本分析 | |
| st.subheader("Analysis Result:") | |
| generate_image(final) | |
| if __name__ == "__main__": | |
| main() | |