GSMEthesis commited on
Commit
5d79328
·
verified ·
1 Parent(s): 1dadff5

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +23 -60
app.py CHANGED
@@ -743,15 +743,14 @@ h3 {
743
  def custom_likert_slider(question_data):
744
  """نمایش سوال لیکرت با اسلایدر 7 نقطه‌ای افقی و لیبل‌های سفارشی"""
745
  question = question_data["question"]
746
- key = question_data["key"] # استخراج کلید از داده‌ها
747
  points = question_data["scale"] # تعداد نقاط (7 نقطه)
748
  labels = question_data.get("labels", ["کمترین", "بیشترین"]) # لیبل‌های پیش‌فرض
749
 
750
  # دریافت مقدار آخرین انتخاب از session_state (اگر موجود باشد)
751
- # اگر هیچ مقداری ذخیره نشده باشد، مقدار پیش‌فرض وسط طیف را می‌گیریم
752
- default_value = st.session_state.get(key, (points + 1) // 2)
753
 
754
- # نمایش اسلایدر در HTML
755
  html = f"""
756
  <div id="container_{key}" style="direction: ltr; font-family: 'B Nazanin'; margin-bottom: 30px;">
757
  <label style="font-size: 16px; font-weight: bold; display: block; text-align: right;">{question}</label>
@@ -775,7 +774,7 @@ def custom_likert_slider(question_data):
775
  // ارسال مقدار به Streamlit
776
  window.parent.postMessage({{
777
  type: 'streamlit:setComponentValue',
778
- key: key,
779
  value: value
780
  }}, '*');
781
  }}
@@ -785,10 +784,17 @@ def custom_likert_slider(question_data):
785
  # نمایش کامپوننت HTML
786
  components.html(html, height=150)
787
 
788
- # ذخیره‌سازی مقدار انتخابی در session_state
789
- st.session_state[key] = default_value
790
  return default_value
791
 
 
 
 
 
 
 
 
792
  def create_ride_map():
793
  """ایجاد نقشه سفر با Folium - نسخه اصلاح شده با مناطق عمومی"""
794
  # نقاط تقریبی برای مناطق عمومی جنوب و غرب تهران
@@ -1209,74 +1215,31 @@ def random_likert_questions():
1209
  "key": "distributive_1",
1210
  "question": "قیمتی که به شما ارائه شد، چگونه بود؟",
1211
  "scale": 7,
1212
- "labels": ["کاملاً نامنصفانه", "کاملاً منصفانه"] # لیبل‌های سفارشی برای این سوال
1213
  },
1214
  {
1215
  "key": "distributive_2",
1216
  "question": "قیمتی که به شما ارائه شد، چگونه بود؟",
1217
  "scale": 7,
1218
  "labels": ["کاملاً غیرمعقول", "کاملاً معقول"]
1219
- },
1220
- {
1221
- "key": "distributive_3",
1222
- "question": "قیمتی که به شما ارائه شد، چگونه بود؟",
1223
- "scale": 7,
1224
- "labels": ["کاملاً غیرقابل قبول", "کاملاً قابل قبول"]
1225
  }
1226
  ]
1227
- },
1228
- {
1229
- "title": "عدالت رویه‌ای",
1230
- "key": "procedural",
1231
- "questions": [
1232
- {"key": "procedural_1", "question": ".فرآیند و رویه قیمت‌گذاری پلتفرم قابل قبول است", "scale": 7, "labels": ["کاملاً مخالفم", "کاملاً موافقم"]},
1233
- {"key": "procedural_2", "question": ".فرآیند و رویه قیمت‌گذاری پلتفرم منصفانه است", "scale": 7, "labels": ["کاملاً مخالفم", "کاملاً موافقم"]},
1234
- {"key": "procedural_3", "question": ".فرآیند و رویه قیمت‌گذاری پلتفرم معقول است", "scale": 7, "labels": ["کاملاً مخالفم", "کاملاً موافقم"]}
1235
- ]
1236
- },
1237
- {
1238
- "title": "عدالت اطلاعاتی",
1239
- "key": "informational",
1240
- "questions": [
1241
- {"key": "informational_1", "question": "تا چه حد رهیار دلایل تعیین قیمت را به صورت صادقانه توضیح داد؟", "scale": 7, "labels": ["هیچ", "خیلی زیاد"]},
1242
- {"key": "informational_2", "question": "تا چه حد ر��یار عوامل مؤثر بر تعیین قیمت را به طور کامل شرح داد؟", "scale": 7, "labels": ["هیچ", "خیلی زیاد"]},
1243
- {"key": "informational_3", "question": "تا چه حد دلایل ارائه‌شده توسط رهیار برای تعیین قیمت منطقی و قابل قبول بود؟", "scale": 7, "labels": ["هیچ", "خیلی زیاد"]},
1244
- {"key": "informational_4", "question": "تا چه حد توضیحات درباره تعیین قیمت بلافاصله و در زمان مناسب نمایش داده شد؟", "scale": 7, "labels": ["هیچ", "خیلی زیاد"]},
1245
- {"key": "informational_5", "question": "تا چه حد توضیحات رهیار درباره تعیین قیمت، متناسب با شرایط سفر شما بود؟", "scale": 7, "labels": ["هیچ", "خیلی زیاد"]}
1246
- ]
1247
  }
1248
  ]
1249
-
1250
- # مقداردهی اولیه
1251
- if 'current_likert_group' not in st.session_state:
1252
- st.session_state.current_likert_group = 0
1253
 
1254
  # دریافت گروه جاری
1255
- current_group = question_groups[st.session_state.current_likert_group]
1256
-
1257
- # نمایش عنوان گروه
1258
  st.markdown(f"<h3>{current_group['title']}</h3>")
1259
-
1260
- # نمایش تمام سوالات این گروه در یک صفحه
1261
- for question in current_group['questions']:
1262
- # دریافت مقدار اسلایدر و ذخیره آن
1263
  answer = custom_likert_slider(question)
1264
- st.session_state[question["key"]] = answer # ذخیره مقدار اسلایدر در session_state
 
1265
 
1266
- # دکمه ادامه/اتمام
1267
- button_label = "ادامه به گروه بعدی" if st.session_state.current_likert_group < len(question_groups)-1 else "ادامه به توضیحات"
1268
-
1269
- if st.button(button_label):
1270
- # ذخیره مقادیر اسلایدرها پس از کلیک روی دکمه "ادامه"
1271
- save_likert_answers()
1272
-
1273
- # رفتن به گروه بعدی یا صفحه توضیحات
1274
- if st.session_state.current_likert_group < len(question_groups) - 1:
1275
- st.session_state.current_likert_group += 1
1276
- st.rerun()
1277
- else:
1278
- st.session_state.current_page = "explanation_questions"
1279
- st.rerun()
1280
 
1281
 
1282
  def random_likert_questions():
 
743
  def custom_likert_slider(question_data):
744
  """نمایش سوال لیکرت با اسلایدر 7 نقطه‌ای افقی و لیبل‌های سفارشی"""
745
  question = question_data["question"]
746
+ key = question_data["key"]
747
  points = question_data["scale"] # تعداد نقاط (7 نقطه)
748
  labels = question_data.get("labels", ["کمترین", "بیشترین"]) # لیبل‌های پیش‌فرض
749
 
750
  # دریافت مقدار آخرین انتخاب از session_state (اگر موجود باشد)
751
+ default_value = st.session_state.get(f"output_{key}", (points + 1) // 2) # استفاده از output_{key}
 
752
 
753
+ # HTML و JavaScript برای ایجاد اسلایدر
754
  html = f"""
755
  <div id="container_{key}" style="direction: ltr; font-family: 'B Nazanin'; margin-bottom: 30px;">
756
  <label style="font-size: 16px; font-weight: bold; display: block; text-align: right;">{question}</label>
 
774
  // ارسال مقدار به Streamlit
775
  window.parent.postMessage({{
776
  type: 'streamlit:setComponentValue',
777
+ key: 'output_' + key,
778
  value: value
779
  }}, '*');
780
  }}
 
784
  # نمایش کامپوننت HTML
785
  components.html(html, height=150)
786
 
787
+ # ذخیره‌سازی مقدار انتخابی در session_state با کلید output_{key}
788
+ st.session_state[f"output_{key}"] = default_value
789
  return default_value
790
 
791
+ def save_likert_answers():
792
+ """ذخیره مقادیر نهایی اسلایدرها در session_state پس از کلیک روی دکمه 'ادامه'"""
793
+ for key in st.session_state.keys():
794
+ if "distributive" in key or "procedural" in key or "informational" in key: # انتخاب کلیدهای مربوط به سوالات
795
+ st.session_state[key] = st.session_state.get(key, None)
796
+
797
+
798
  def create_ride_map():
799
  """ایجاد نقشه سفر با Folium - نسخه اصلاح شده با مناطق عمومی"""
800
  # نقاط تقریبی برای مناطق عمومی جنوب و غرب تهران
 
1215
  "key": "distributive_1",
1216
  "question": "قیمتی که به شما ارائه شد، چگونه بود؟",
1217
  "scale": 7,
1218
+ "labels": ["کاملاً نامنصفانه", "کاملاً منصفانه"]
1219
  },
1220
  {
1221
  "key": "distributive_2",
1222
  "question": "قیمتی که به شما ارائه شد، چگونه بود؟",
1223
  "scale": 7,
1224
  "labels": ["کاملاً غیرمعقول", "کاملاً معقول"]
 
 
 
 
 
 
1225
  }
1226
  ]
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1227
  }
1228
  ]
 
 
 
 
1229
 
1230
  # دریافت گروه جاری
1231
+ current_group = question_groups[0]
 
 
1232
  st.markdown(f"<h3>{current_group['title']}</h3>")
1233
+
1234
+ for question in current_group["questions"]:
 
 
1235
  answer = custom_likert_slider(question)
1236
+ # ذخیره مقدار انتخابی با نام output_{key}
1237
+ st.session_state[f"output_{question['key']}"] = answer
1238
 
1239
+ # دکمه ادامه
1240
+ if st.button("ادامه"):
1241
+ st.write("مقادیر انتخابی ذخیره شده در session_state:")
1242
+ st.write(st.session_state) # نمایش محتویات session_state برای بررسی
 
 
 
 
 
 
 
 
 
 
1243
 
1244
 
1245
  def random_likert_questions():