GSMEthesis commited on
Commit
e0656d2
·
verified ·
1 Parent(s): 5bb851e

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +51 -15
app.py CHANGED
@@ -737,7 +737,8 @@ h3 {
737
  </style>
738
  """, unsafe_allow_html=True)
739
 
740
- # ========== توابع اصلی ==========
 
741
  def custom_likert_slider(question_data):
742
  """نمایش سوال لیکرت با اسلایدر نقطه‌ای و لیبل‌های سفارشی"""
743
  question = question_data["question"]
@@ -757,25 +758,40 @@ def custom_likert_slider(question_data):
757
  <span>{labels[1]}</span>
758
  </div>
759
  <input type="range" id="{key}" min="1" max="{points}" step="1" value="{default_value}"
760
- style="width: 100%; height: 10px; accent-color: #6a0dad; margin-bottom: 15px;">
 
761
  <div style="text-align: center; margin-top: 10px; direction: rtl;">
762
  پاسخ انتخاب‌شده: <strong><span id="output_{key}">{default_value}</span></strong>
763
  </div>
764
  </div>
 
 
 
 
 
 
 
 
 
 
 
 
 
 
765
  """
766
 
767
  # نمایش کامپوننت
768
  components.html(html, height=150)
769
 
770
- # مقدار نهایی
771
  return default_value
772
 
773
-
774
- def handle_submit(question_key, value):
775
- """ذخیره مقدار نهایی اسلایدر پس از کلیک روی دکمه 'ادامه'"""
776
- st.session_state[question_key] = value
777
- st.write(f"مقدار انتخاب‌شده برای {question_key}: {value}")
778
-
779
  def create_ride_map():
780
  """ایجاد نقشه سفر با Folium - نسخه اصلاح شده با مناطق عمومی"""
781
  # نقاط تقریبی برای مناطق عمومی جنوب و غرب تهران
@@ -1212,6 +1228,26 @@ def random_likert_questions():
1212
  }
1213
  ]
1214
  },
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1215
  ]
1216
 
1217
  # مقداردهی اولیه
@@ -1231,21 +1267,21 @@ def random_likert_questions():
1231
  st.session_state[question["key"]] = answer # ذخیره مقدار اسلایدر در session_state
1232
 
1233
  # دکمه ادامه/اتمام
1234
- button_label = "ادامه به گروه بعدی" if st.session_state.current_likert_group < len(question_groups)-1 else "اتمام پرسشنامه"
1235
 
1236
  if st.button(button_label):
1237
- # ذخیره مقدار اسلایدر نهایی پس از کلیک
1238
- for question in current_group['questions']:
1239
- handle_submit(question["key"], st.session_state[question["key"]])
1240
 
1241
- # رفتن به گروه بعدی یا صفحه پایانی
1242
  if st.session_state.current_likert_group < len(question_groups) - 1:
1243
  st.session_state.current_likert_group += 1
1244
  st.rerun()
1245
  else:
1246
- st.session_state.current_page = "thank_you"
1247
  st.rerun()
1248
 
 
1249
  def explanation_questions():
1250
  """نمایش سوالات تکمیلی به صورت مرحله‌ای با دکمه ادامه"""
1251
  st.markdown("### 📋 سوالات تکمیلی")
 
737
  </style>
738
  """, unsafe_allow_html=True)
739
 
740
+
741
+
742
  def custom_likert_slider(question_data):
743
  """نمایش سوال لیکرت با اسلایدر نقطه‌ای و لیبل‌های سفارشی"""
744
  question = question_data["question"]
 
758
  <span>{labels[1]}</span>
759
  </div>
760
  <input type="range" id="{key}" min="1" max="{points}" step="1" value="{default_value}"
761
+ style="width: 100%; height: 10px; accent-color: #6a0dad; margin-bottom: 15px;"
762
+ oninput="updateSlider('{key}')">
763
  <div style="text-align: center; margin-top: 10px; direction: rtl;">
764
  پاسخ انتخاب‌شده: <strong><span id="output_{key}">{default_value}</span></strong>
765
  </div>
766
  </div>
767
+
768
+ <script>
769
+ function updateSlider(key) {{
770
+ const value = parseInt(document.getElementById(key).value);
771
+ document.getElementById('output_' + key).innerText = value;
772
+
773
+ // ارسال مقدار به Streamlit
774
+ window.parent.postMessage({{
775
+ type: 'streamlit:setComponentValue',
776
+ key: key,
777
+ value: value
778
+ }}, '*');
779
+ }}
780
+ </script>
781
  """
782
 
783
  # نمایش کامپوننت
784
  components.html(html, height=150)
785
 
786
+ # مقدار نهایی را به صورت موقت در session_state ذخیره کن
787
  return default_value
788
 
789
+ def save_likert_answers():
790
+ """ذخیره مقادیر نهایی اسلایدرها در session_state پس از کلیک روی دکمه 'ادامه'"""
791
+ # ذخیره تمامی مقادیر اسلایدرها در session_state
792
+ for key in st.session_state.keys():
793
+ if "distributive" in key or "procedural" in key or "informational" in key: # انتخاب کلیدهای مربوط به سوالات
794
+ st.session_state[key] = st.session_state.get(key, None)
795
  def create_ride_map():
796
  """ایجاد نقشه سفر با Folium - نسخه اصلاح شده با مناطق عمومی"""
797
  # نقاط تقریبی برای مناطق عمومی جنوب و غرب تهران
 
1228
  }
1229
  ]
1230
  },
1231
+ {
1232
+ "title": "عدالت رویه‌ای",
1233
+ "key": "procedural",
1234
+ "questions": [
1235
+ {"key": "procedural_1", "question": ".فرآیند و رویه قیمت‌گذاری پلتفرم قابل قبول است", "scale": 7, "labels": ["کاملاً مخالفم", "کاملاً موافقم"]},
1236
+ {"key": "procedural_2", "question": ".فرآیند و رویه قیمت‌گذاری پلتفرم منصفانه است", "scale": 7, "labels": ["کاملاً مخالفم", "کاملاً موافقم"]},
1237
+ {"key": "procedural_3", "question": ".فرآیند و رویه قیمت‌گذاری پلتفرم معقول است", "scale": 7, "labels": ["کاملاً مخالفم", "کاملاً موافقم"]}
1238
+ ]
1239
+ },
1240
+ {
1241
+ "title": "عدالت اطلاعاتی",
1242
+ "key": "informational",
1243
+ "questions": [
1244
+ {"key": "informational_1", "question": "تا چه حد رهیار دلایل تعیین قیمت را به صورت صادقانه توضیح داد؟", "scale": 7, "labels": ["هیچ", "خیلی زیاد"]},
1245
+ {"key": "informational_2", "question": "تا چه حد رهیار عوامل مؤثر بر تعیین قیمت را به طور کامل شرح داد؟", "scale": 7, "labels": ["هیچ", "خیلی زیاد"]},
1246
+ {"key": "informational_3", "question": "تا چه حد دلایل ارائه‌شده توسط رهیار برای تعیین قیمت منطقی و قابل قبول بود؟", "scale": 7, "labels": ["هیچ", "خیلی زیاد"]},
1247
+ {"key": "informational_4", "question": "تا چه حد توضیحات درباره تعیین قیمت بلافاصله و در زمان مناسب نمایش داده شد؟", "scale": 7, "labels": ["هیچ", "خیلی زیاد"]},
1248
+ {"key": "informational_5", "question": "تا چه حد توضیحات رهیار درباره تعیین قیمت، متناسب با شرایط سفر شما بود؟", "scale": 7, "labels": ["هیچ", "خیلی زیاد"]}
1249
+ ]
1250
+ }
1251
  ]
1252
 
1253
  # مقداردهی اولیه
 
1267
  st.session_state[question["key"]] = answer # ذخیره مقدار اسلایدر در session_state
1268
 
1269
  # دکمه ادامه/اتمام
1270
+ button_label = "ادامه به گروه بعدی" if st.session_state.current_likert_group < len(question_groups)-1 else "ادامه به توضیحات"
1271
 
1272
  if st.button(button_label):
1273
+ # ذخیره مقادیر اسلایدرها پس از کلیک روی دکمه "ادامه"
1274
+ save_likert_answers()
 
1275
 
1276
+ # رفتن به گروه بعدی یا صفحه توضیحات
1277
  if st.session_state.current_likert_group < len(question_groups) - 1:
1278
  st.session_state.current_likert_group += 1
1279
  st.rerun()
1280
  else:
1281
+ st.session_state.current_page = "explanation_questions"
1282
  st.rerun()
1283
 
1284
+
1285
  def explanation_questions():
1286
  """نمایش سوالات تکمیلی به صورت مرحله‌ای با دکمه ادامه"""
1287
  st.markdown("### 📋 سوالات تکمیلی")