Spaces:
Paused
Paused
Update app.py
Browse files
app.py
CHANGED
|
@@ -752,7 +752,19 @@ def enhanced_likert_scale(question_data):
|
|
| 752 |
st.markdown(f"<div style='text-align:center; font-weight:bold; margin-bottom:15px;'>{question}</div>",
|
| 753 |
unsafe_allow_html=True)
|
| 754 |
|
| 755 |
-
# ایجاد
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 756 |
scale_html = f"""
|
| 757 |
<style>
|
| 758 |
.likert-line {{
|
|
@@ -810,57 +822,23 @@ def enhanced_likert_scale(question_data):
|
|
| 810 |
}}
|
| 811 |
}}
|
| 812 |
</style>
|
| 813 |
-
|
| 814 |
-
<div class='likert-container'>
|
| 815 |
-
<div class='likert-labels'>
|
| 816 |
-
<span>{labels[1]}</span>
|
| 817 |
-
<span>{labels[0]}</span>
|
| 818 |
-
</div>
|
| 819 |
-
<div class='likert-line'>
|
| 820 |
"""
|
| 821 |
|
| 822 |
-
# اضافه کردن نقاط
|
| 823 |
-
for i in range(scale):
|
| 824 |
-
value = scale - i
|
| 825 |
-
is_selected = st.session_state.get(key) == value
|
| 826 |
-
scale_html += f"<div class='likert-dot {'selected' if is_selected else ''}' onclick='setLikertValue({value})'></div>"
|
| 827 |
-
|
| 828 |
-
scale_html += "</div>"
|
| 829 |
-
|
| 830 |
# نمایش مقدار انتخاب شده
|
| 831 |
if st.session_state.get(key):
|
| 832 |
-
scale_html += f"<div class='likert-value'>پاسخ شما: {st.session_state[key]}</div>"
|
| 833 |
|
| 834 |
scale_html += "</div>"
|
| 835 |
-
|
| 836 |
-
# تزریق
|
| 837 |
-
components.html(scale_html
|
| 838 |
-
|
| 839 |
-
|
| 840 |
-
|
| 841 |
-
|
| 842 |
-
|
| 843 |
-
|
| 844 |
-
|
| 845 |
-
}
|
| 846 |
-
});
|
| 847 |
-
}
|
| 848 |
-
</script>
|
| 849 |
-
""", height=80)
|
| 850 |
-
|
| 851 |
-
# دکمههای واقعی (مخفی و کوچک)
|
| 852 |
-
btn_cols = st.columns(scale)
|
| 853 |
-
for i in range(scale):
|
| 854 |
-
with btn_cols[i]:
|
| 855 |
-
value = scale - i
|
| 856 |
-
if st.button(
|
| 857 |
-
str(value),
|
| 858 |
-
key=f"{key}_btn_{value}",
|
| 859 |
-
type="primary" if st.session_state.get(key) == value else "secondary",
|
| 860 |
-
help="این دکمهها مخفی هستند" # پیام راهنما
|
| 861 |
-
):
|
| 862 |
-
st.session_state[key] = value
|
| 863 |
-
st.rerun()
|
| 864 |
|
| 865 |
return st.session_state.get(key)
|
| 866 |
|
|
|
|
| 752 |
st.markdown(f"<div style='text-align:center; font-weight:bold; margin-bottom:15px;'>{question}</div>",
|
| 753 |
unsafe_allow_html=True)
|
| 754 |
|
| 755 |
+
# ایجاد سلکت باکس برای انتخاب گزینهها
|
| 756 |
+
selected_value = st.selectbox(
|
| 757 |
+
"لطفاً یک گزینه را انتخاب کنید:",
|
| 758 |
+
options=range(1, scale+1), # گزینهها از 1 تا scale
|
| 759 |
+
index=st.session_state.get(key) - 1 if st.session_state.get(key) else 0, # پیشفرض انتخاب شده
|
| 760 |
+
key=f"select_{key}",
|
| 761 |
+
format_func=lambda x: labels[x-1] # برچسبها برای هر گزینه
|
| 762 |
+
)
|
| 763 |
+
|
| 764 |
+
# ذخیره انتخاب کاربر
|
| 765 |
+
st.session_state[key] = selected_value
|
| 766 |
+
|
| 767 |
+
# نمایش خط و دکمهها با HTML/CSS
|
| 768 |
scale_html = f"""
|
| 769 |
<style>
|
| 770 |
.likert-line {{
|
|
|
|
| 822 |
}}
|
| 823 |
}}
|
| 824 |
</style>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 825 |
"""
|
| 826 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 827 |
# نمایش مقدار انتخاب شده
|
| 828 |
if st.session_state.get(key):
|
| 829 |
+
scale_html += f"<div class='likert-value'>پاسخ شما: {labels[st.session_state[key] - 1]}</div>"
|
| 830 |
|
| 831 |
scale_html += "</div>"
|
| 832 |
+
|
| 833 |
+
# تزریق HTML/CSS برای خط و نقاط
|
| 834 |
+
components.html(scale_html, height=80)
|
| 835 |
+
|
| 836 |
+
# دکمه ارسال (پررنگ و فعال)
|
| 837 |
+
button_label = "ثبت پاسخ"
|
| 838 |
+
if st.session_state.get(key) is not None:
|
| 839 |
+
st.button(button_label, use_container_width=True, key=f"submit_{key}", type="primary")
|
| 840 |
+
else:
|
| 841 |
+
st.button(button_label, use_container_width=True, key=f"submit_{key}", type="secondary")
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 842 |
|
| 843 |
return st.session_state.get(key)
|
| 844 |
|