GSMEthesis commited on
Commit
6f01817
·
verified ·
1 Parent(s): d847702

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +31 -32
app.py CHANGED
@@ -680,26 +680,31 @@ def custom_likert_slider(question, key, points=7):
680
  7: ["کاملاً مخالفم", "نسبتاً مخالفم", "کمی مخالفم", "خنثی", "کمی موافقم", "نسبتاً موافقم", "کاملاً موافقم"]
681
  }
682
  labels = options.get(points)
683
-
684
- slider_id = f"slider_{key}"
685
  default_value = (points + 1) // 2
686
 
687
- html = f"""
688
- <div id="container_{key}" style="direction: rtl; font-family: 'B Nazanin'; margin-bottom: 30px;">
689
- <label style="font-size: 16px; font-weight: bold;">{question}</label>
690
- <div style="display: flex; justify-content: space-between; font-size: 12px; margin-bottom: 5px;">
 
691
  {''.join(f"<span>{label}</span>" for label in labels)}
692
  </div>
693
- <input type="range" id="{slider_id}" min="1" max="{points}" step="1" value="{default_value}"
694
- style="width: 100%; accent-color: #6a0dad;"
695
- oninput="document.getElementById('output_{key}').innerText=this.value;
696
- window.parent.postMessage({{type: 'streamlit:setComponentValue', value: parseInt(this.value)}}, '*')">
697
- <p style="text-align: center; margin-top: 10px;">پاسخ انتخاب‌شده: <strong><span id="output_{key}">{default_value}</span></strong></p>
698
- </div>
699
- """
 
 
 
 
 
 
 
700
 
701
- # توجه: این خط مقدار را از JS برمی‌گرداند (به‌صورت عددی قابل ذخیره)
702
- return components.html(html, height=150)
703
 
704
  def create_ride_map():
705
  """ایجاد نقشه سفر با Folium - نسخه اصلاح شده با مناطق عمومی"""
@@ -1094,8 +1099,7 @@ def attention_check1():
1094
  st.warning("لطفاً یک گزینه را انتخاب کنید")
1095
 
1096
  def random_likert_questions():
1097
- """نمایش سوالات لیکرت با اسلایدرهای سفارشی قابل ذخیره‌سازی"""
1098
- # تعریف گروه‌های سوالات با ترتیب مشخص
1099
  question_groups = [
1100
  {
1101
  "title": "عدالت توزیعی",
@@ -1135,19 +1139,15 @@ def random_likert_questions():
1135
  }
1136
  ]
1137
 
1138
- # مقداردهی اولیه
1139
  if 'current_likert_group' not in st.session_state:
1140
  st.session_state.current_likert_group = 0
1141
  st.session_state.answers = st.session_state.get('answers', {})
1142
 
1143
- # دریافت گروه جاری
1144
  current_group = question_groups[st.session_state.current_likert_group]
1145
 
1146
- # نمایش عنوان گروه
1147
  st.markdown(f"## {current_group['title']}")
1148
  st.markdown("---")
1149
 
1150
- # ثبت پاسخ‌های جاری
1151
  all_answered = True
1152
  for question in current_group['questions']:
1153
  value = custom_likert_slider(
@@ -1155,24 +1155,23 @@ def random_likert_questions():
1155
  key=question["key"],
1156
  points=question["scale"]
1157
  )
1158
- if isinstance(value, int):
1159
  st.session_state.answers[question["key"]] = value
1160
  else:
1161
  all_answered = False
1162
 
1163
- # دکمه ادامه یا اتمام
1164
  button_label = "ادامه به گروه بعدی" if st.session_state.current_likert_group < len(question_groups) - 1 else "اتمام پرسشنامه"
1165
 
1166
- if st.button(button_label, disabled=not all_answered):
1167
- if st.session_state.current_likert_group < len(question_groups) - 1:
1168
- st.session_state.current_likert_group += 1
1169
- st.rerun()
 
 
 
 
1170
  else:
1171
- st.session_state.current_page = "explanation_questions"
1172
- st.rerun()
1173
-
1174
- if not all_answered:
1175
- st.warning("لطفاً به تمام سوالات این بخش پاسخ دهید.")
1176
 
1177
 
1178
  def explanation_questions():
 
680
  7: ["کاملاً مخالفم", "نسبتاً مخالفم", "کمی مخالفم", "خنثی", "کمی موافقم", "نسبتاً موافقم", "کاملاً موافقم"]
681
  }
682
  labels = options.get(points)
 
 
683
  default_value = (points + 1) // 2
684
 
685
+ st.markdown(f"<div style='font-family: B Nazanin; direction: rtl; font-size: 16px; font-weight: bold;'>{question}</div>", unsafe_allow_html=True)
686
+
687
+ st.markdown(
688
+ f"""
689
+ <div style='display: flex; justify-content: space-between; font-size: 12px; direction: rtl; margin-bottom: -10px;'>
690
  {''.join(f"<span>{label}</span>" for label in labels)}
691
  </div>
692
+ """, unsafe_allow_html=True
693
+ )
694
+
695
+ # اسلایدر واقعی Streamlit (قابل ذخیره‌سازی)
696
+ value = st.slider(
697
+ label=" ",
698
+ min_value=1,
699
+ max_value=points,
700
+ value=default_value,
701
+ step=1,
702
+ key=key
703
+ )
704
+
705
+ st.markdown(f"<p style='text-align: center; color: #6a0dad;'>پاسخ شما: <strong>{value}</strong></p>", unsafe_allow_html=True)
706
 
707
+ return value
 
708
 
709
  def create_ride_map():
710
  """ایجاد نقشه سفر با Folium - نسخه اصلاح شده با مناطق عمومی"""
 
1099
  st.warning("لطفاً یک گزینه را انتخاب کنید")
1100
 
1101
  def random_likert_questions():
1102
+ """نمایش سوالات لیکرت با استایل زیبا و مقدار قابل ذخیره‌سازی"""
 
1103
  question_groups = [
1104
  {
1105
  "title": "عدالت توزیعی",
 
1139
  }
1140
  ]
1141
 
 
1142
  if 'current_likert_group' not in st.session_state:
1143
  st.session_state.current_likert_group = 0
1144
  st.session_state.answers = st.session_state.get('answers', {})
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
  all_answered = True
1152
  for question in current_group['questions']:
1153
  value = custom_likert_slider(
 
1155
  key=question["key"],
1156
  points=question["scale"]
1157
  )
1158
+ if value:
1159
  st.session_state.answers[question["key"]] = value
1160
  else:
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
+ if all_answered:
1167
+ if st.session_state.current_likert_group < len(question_groups) - 1:
1168
+ st.session_state.current_likert_group += 1
1169
+ st.rerun()
1170
+ else:
1171
+ st.session_state.current_page = "explanation_questions"
1172
+ st.rerun()
1173
  else:
1174
+ st.warning("لطفاً به تمام سوالات این بخش پاسخ دهید.")
 
 
 
 
1175
 
1176
 
1177
  def explanation_questions():