Spaces:
Sleeping
Sleeping
Update app.py
Browse files
app.py
CHANGED
|
@@ -675,36 +675,56 @@ h3 {
|
|
| 675 |
|
| 676 |
# ========== توابع اصلی ==========
|
| 677 |
def custom_likert_slider(question, key, points=7):
|
|
|
|
| 678 |
options = {
|
| 679 |
5: ["کاملاً مخالفم", "مخالفم", "خنثی", "موافقم", "کاملاً موافقم"],
|
| 680 |
7: ["کاملاً مخالفم", "نسبتاً مخالفم", "کمی مخالفم", "خنثی", "کمی موافقم", "نسبتاً موافقم", "کاملاً موافقم"]
|
| 681 |
}
|
| 682 |
-
labels = options.get(points)
|
| 683 |
-
|
| 684 |
-
|
| 685 |
-
st.
|
| 686 |
-
|
| 687 |
-
|
| 688 |
-
|
| 689 |
-
|
| 690 |
-
|
|
|
|
|
|
|
| 691 |
</div>
|
| 692 |
-
"""
|
| 693 |
-
|
| 694 |
-
|
| 695 |
-
|
| 696 |
-
|
| 697 |
-
|
| 698 |
-
|
| 699 |
-
|
| 700 |
-
|
| 701 |
-
|
| 702 |
-
|
| 703 |
-
|
| 704 |
-
|
| 705 |
-
|
| 706 |
-
|
| 707 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 708 |
|
| 709 |
def create_ride_map():
|
| 710 |
"""ایجاد نقشه سفر با Folium - نسخه اصلاح شده با مناطق عمومی"""
|
|
@@ -1099,7 +1119,8 @@ def attention_check1():
|
|
| 1099 |
st.warning("لطفاً یک گزینه را انتخاب کنید")
|
| 1100 |
|
| 1101 |
def random_likert_questions():
|
| 1102 |
-
"""نمایش سوالات لیکرت ب
|
|
|
|
| 1103 |
question_groups = [
|
| 1104 |
{
|
| 1105 |
"title": "عدالت توزیعی",
|
|
@@ -1139,39 +1160,36 @@ def random_likert_questions():
|
|
| 1139 |
}
|
| 1140 |
]
|
| 1141 |
|
|
|
|
| 1142 |
if 'current_likert_group' not in st.session_state:
|
| 1143 |
st.session_state.current_likert_group = 0
|
| 1144 |
-
|
| 1145 |
-
|
| 1146 |
current_group = question_groups[st.session_state.current_likert_group]
|
| 1147 |
-
|
|
|
|
| 1148 |
st.markdown(f"## {current_group['title']}")
|
| 1149 |
st.markdown("---")
|
| 1150 |
-
|
| 1151 |
-
|
| 1152 |
for question in current_group['questions']:
|
| 1153 |
-
|
| 1154 |
question=question["question"],
|
| 1155 |
key=question["key"],
|
| 1156 |
points=question["scale"]
|
| 1157 |
)
|
| 1158 |
-
|
| 1159 |
-
|
| 1160 |
-
|
| 1161 |
-
all_answered = False
|
| 1162 |
-
|
| 1163 |
-
button_label = "ادامه به گروه بعدی" if st.session_state.current_likert_group < len(question_groups) - 1 else "اتمام پرسشنامه"
|
| 1164 |
|
| 1165 |
if st.button(button_label):
|
| 1166 |
-
|
| 1167 |
-
|
| 1168 |
-
|
| 1169 |
-
|
| 1170 |
-
else:
|
| 1171 |
-
st.session_state.current_page = "explanation_questions"
|
| 1172 |
-
st.rerun()
|
| 1173 |
else:
|
| 1174 |
-
st.
|
|
|
|
| 1175 |
|
| 1176 |
|
| 1177 |
def explanation_questions():
|
|
|
|
| 675 |
|
| 676 |
# ========== توابع اصلی ==========
|
| 677 |
def custom_likert_slider(question, key, points=7):
|
| 678 |
+
# تعریف گزینهها
|
| 679 |
options = {
|
| 680 |
5: ["کاملاً مخالفم", "مخالفم", "خنثی", "موافقم", "کاملاً موافقم"],
|
| 681 |
7: ["کاملاً مخالفم", "نسبتاً مخالفم", "کمی مخالفم", "خنثی", "کمی موافقم", "نسبتاً موافقم", "کاملاً موافقم"]
|
| 682 |
}
|
| 683 |
+
labels = options.get(points, options[7])
|
| 684 |
+
|
| 685 |
+
# مقدار پیشفرض از session_state یا نقطه میانی
|
| 686 |
+
default_value = st.session_state.get(key, (points + 1) // 2)
|
| 687 |
+
|
| 688 |
+
# HTML و JavaScript
|
| 689 |
+
html = f"""
|
| 690 |
+
<div id="container_{key}" style="direction: rtl; font-family: 'B Nazanin'; margin-bottom: 30px;">
|
| 691 |
+
<label style="font-size: 16px; font-weight: bold;">{question}</label>
|
| 692 |
+
<div style="display: flex; justify-content: space-between; font-size: 12px; margin-bottom: 5px;">
|
| 693 |
+
{''.join(f'<span style="flex: 1; text-align: center;">{label}</span>' for label in labels)}
|
| 694 |
</div>
|
| 695 |
+
<input type="range" id="{key}" min="1" max="{points}" step="1" value="{default_value}"
|
| 696 |
+
style="width: 100%; height: 10px; accent-color: #6a0dad; margin-bottom: 15px;"
|
| 697 |
+
oninput="updateSlider('{key}')">
|
| 698 |
+
<div style="text-align: center; margin-top: 10px;">
|
| 699 |
+
پاسخ انتخابشده: <strong><span id="output_{key}">{default_value}</span></strong>
|
| 700 |
+
<span id="label_{key}" style="color: #6a0dad; margin-right: 5px;">({labels[default_value-1]})</span>
|
| 701 |
+
</div>
|
| 702 |
+
</div>
|
| 703 |
+
|
| 704 |
+
<script>
|
| 705 |
+
function updateSlider(key) {{
|
| 706 |
+
const value = parseInt(document.getElementById(key).value);
|
| 707 |
+
document.getElementById('output_' + key).innerText = value;
|
| 708 |
+
document.getElementById('label_' + key).innerText = '(' + {json.dumps(labels)}[value-1] + ')';
|
| 709 |
+
|
| 710 |
+
// ارسال مقدار به Streamlit
|
| 711 |
+
window.parent.postMessage({{
|
| 712 |
+
type: 'streamlit:setComponentValue',
|
| 713 |
+
key: key,
|
| 714 |
+
value: value
|
| 715 |
+
}}, '*');
|
| 716 |
+
}}
|
| 717 |
+
</script>
|
| 718 |
+
"""
|
| 719 |
+
|
| 720 |
+
# نمایش کامپوننت و دریافت مقدار
|
| 721 |
+
selected_value = components.html(html, height=180, key=key)
|
| 722 |
+
|
| 723 |
+
# ذخیره مقدار در session_state
|
| 724 |
+
if selected_value is not None:
|
| 725 |
+
st.session_state[key] = selected_value
|
| 726 |
+
|
| 727 |
+
return selected_value
|
| 728 |
|
| 729 |
def create_ride_map():
|
| 730 |
"""ایجاد نقشه سفر با Folium - نسخه اصلاح شده با مناطق عمومی"""
|
|
|
|
| 1119 |
st.warning("لطفاً یک گزینه را انتخاب کنید")
|
| 1120 |
|
| 1121 |
def random_likert_questions():
|
| 1122 |
+
"""نمایش سوالات لیکرت به ترتیب مشخص با اسلایدر سفارشی"""
|
| 1123 |
+
# تعریف گروههای سوالات
|
| 1124 |
question_groups = [
|
| 1125 |
{
|
| 1126 |
"title": "عدالت توزیعی",
|
|
|
|
| 1160 |
}
|
| 1161 |
]
|
| 1162 |
|
| 1163 |
+
# مقداردهی اولیه
|
| 1164 |
if 'current_likert_group' not in st.session_state:
|
| 1165 |
st.session_state.current_likert_group = 0
|
| 1166 |
+
|
| 1167 |
+
# دریافت گروه جاری
|
| 1168 |
current_group = question_groups[st.session_state.current_likert_group]
|
| 1169 |
+
|
| 1170 |
+
# نمایش عنوان گروه
|
| 1171 |
st.markdown(f"## {current_group['title']}")
|
| 1172 |
st.markdown("---")
|
| 1173 |
+
|
| 1174 |
+
# نمایش تمام سوالات این گروه در یک صفحه
|
| 1175 |
for question in current_group['questions']:
|
| 1176 |
+
answer = custom_likert_slider(
|
| 1177 |
question=question["question"],
|
| 1178 |
key=question["key"],
|
| 1179 |
points=question["scale"]
|
| 1180 |
)
|
| 1181 |
+
|
| 1182 |
+
# دکمه ادامه/اتمام
|
| 1183 |
+
button_label = "ادامه به گروه بعدی" if st.session_state.current_likert_group < len(question_groups)-1 else "اتمام پرسشنامه"
|
|
|
|
|
|
|
|
|
|
| 1184 |
|
| 1185 |
if st.button(button_label):
|
| 1186 |
+
# رفتن به گروه بعدی یا صفحه پایانی
|
| 1187 |
+
if st.session_state.current_likert_group < len(question_groups) - 1:
|
| 1188 |
+
st.session_state.current_likert_group += 1
|
| 1189 |
+
st.rerun()
|
|
|
|
|
|
|
|
|
|
| 1190 |
else:
|
| 1191 |
+
st.session_state.current_page = "explanation_questions"
|
| 1192 |
+
st.rerun()
|
| 1193 |
|
| 1194 |
|
| 1195 |
def explanation_questions():
|