GSMEthesis commited on
Commit
1dadff5
·
verified ·
1 Parent(s): 60a1b21

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +16 -64
app.py CHANGED
@@ -743,7 +743,7 @@ 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
 
@@ -751,7 +751,7 @@ def custom_likert_slider(question_data):
751
  # اگر هیچ مقداری ذخیره نشده باشد، مقدار پیش‌فرض وسط طیف را می‌گیریم
752
  default_value = st.session_state.get(key, (points + 1) // 2)
753
 
754
- # HTML و JavaScript برای ایجاد اسلایدر
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>
@@ -785,15 +785,9 @@ def custom_likert_slider(question_data):
785
  # نمایش کامپوننت HTML
786
  components.html(html, height=150)
787
 
788
- # در اینجا باید مقدار نهایی انتخاب‌شده را از session_state ذخیره کنیم
789
- return st.session_state.get(key, 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 - نسخه اصلاح شده با مناطق عمومی"""
@@ -1297,74 +1291,32 @@ def random_likert_questions():
1297
  "key": "distributive_1",
1298
  "question": "قیمتی که به شما ارائه شد، چگونه بود؟",
1299
  "scale": 7,
1300
- "labels": ["کاملاً نامنصفانه", "کاملاً منصفانه"] # لیبل‌های سفارشی برای این سوال
1301
  },
1302
  {
1303
  "key": "distributive_2",
1304
  "question": "قیمتی که به شما ارائه شد، چگونه بود؟",
1305
  "scale": 7,
1306
  "labels": ["کاملاً غیرمعقول", "کاملاً معقول"]
1307
- },
1308
- {
1309
- "key": "distributive_3",
1310
- "question": "قیمتی که به شما ارائه شد، چگونه بود؟",
1311
- "scale": 7,
1312
- "labels": ["کاملاً غیرقابل قبول", "کاملاً قابل قبول"]
1313
  }
1314
  ]
1315
- },
1316
- {
1317
- "title": "عدالت رویه‌ای",
1318
- "key": "procedural",
1319
- "questions": [
1320
- {"key": "procedural_1", "question": ".فرآیند و رویه قیمت‌گذاری پلتفرم قابل قبول است", "scale": 7, "labels": ["کاملاً مخالفم", "کاملاً موافقم"]},
1321
- {"key": "procedural_2", "question": ".فرآیند و رویه قیمت‌گذاری پلتفرم منصفانه است", "scale": 7, "labels": ["کاملاً مخالفم", "کاملاً موافقم"]},
1322
- {"key": "procedural_3", "question": ".فرآیند و رویه قیمت‌گذاری پلتفرم معقول است", "scale": 7, "labels": ["کاملاً مخالفم", "کاملاً موافقم"]}
1323
- ]
1324
- },
1325
- {
1326
- "title": "عدالت اطلاعاتی",
1327
- "key": "informational",
1328
- "questions": [
1329
- {"key": "informational_1", "question": "تا چه حد رهیار دلایل تعیین قیمت را به صورت صادقانه توضیح داد؟", "scale": 7, "labels": ["هیچ", "خیلی زیاد"]},
1330
- {"key": "informational_2", "question": "تا چه حد رهیار عوامل مؤثر بر تعیین قیمت را به طور کامل شرح داد؟", "scale": 7, "labels": ["هیچ", "خیلی زیاد"]},
1331
- {"key": "informational_3", "question": "تا چه حد دلایل ارائه‌شده توسط رهیار برای تعیین قیمت منطقی و قابل قبول بود؟", "scale": 7, "labels": ["هیچ", "خیلی زیاد"]},
1332
- {"key": "informational_4", "question": "تا چه حد توضیحات درباره تعیین قیمت بلافاصله و در زمان مناسب نمایش داده شد؟", "scale": 7, "labels": ["هیچ", "خیلی زیاد"]},
1333
- {"key": "informational_5", "question": "تا چه حد توضیحات رهیار درباره تعیین قیمت، متناسب با شرایط سفر شما بود؟", "scale": 7, "labels": ["هیچ", "خیلی زیاد"]}
1334
- ]
1335
  }
1336
  ]
1337
-
1338
- # مقداردهی اولیه
1339
- if 'current_likert_group' not in st.session_state:
1340
- st.session_state.current_likert_group = 0
1341
 
1342
  # دریافت گروه جاری
1343
- current_group = question_groups[st.session_state.current_likert_group]
1344
-
1345
- # نمایش عنوان گروه
1346
  st.markdown(f"<h3>{current_group['title']}</h3>")
1347
-
1348
- # نمایش تمام سوالات این گروه در یک صفحه
1349
- for question in current_group['questions']:
1350
- # دریافت مقدار اسلایدر و ذخیره آن
1351
  answer = custom_likert_slider(question)
1352
- st.session_state[question["key"]] = answer # ذخیره مقدار اسلایدر در session_state
 
 
 
 
 
 
1353
 
1354
- # دکمه ادامه/اتمام
1355
- button_label = "ادامه به گروه بعدی" if st.session_state.current_likert_group < len(question_groups)-1 else "ادامه به توضیحات"
1356
-
1357
- if st.button(button_label):
1358
- # ذخیره مقادیر اسلایدرها پس از کلیک روی دکمه "ادامه"
1359
- save_likert_answers()
1360
-
1361
- # رفتن به گروه بعدی یا صفحه توضیحات
1362
- if st.session_state.current_likert_group < len(question_groups) - 1:
1363
- st.session_state.current_likert_group += 1
1364
- st.rerun()
1365
- else:
1366
- st.session_state.current_page = "explanation_questions"
1367
- st.rerun()
1368
 
1369
  def explanation_questions():
1370
  """نمایش سوالات تکمیلی به صورت مرحله‌ای با دکمه ادامه"""
 
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
 
 
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>
 
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 - نسخه اصلاح شده با مناطق عمومی"""
 
1291
  "key": "distributive_1",
1292
  "question": "قیمتی که به شما ارائه شد، چگونه بود؟",
1293
  "scale": 7,
1294
+ "labels": ["کاملاً نامنصفانه", "کاملاً منصفانه"]
1295
  },
1296
  {
1297
  "key": "distributive_2",
1298
  "question": "قیمتی که به شما ارائه شد، چگونه بود؟",
1299
  "scale": 7,
1300
  "labels": ["کاملاً غیرمعقول", "کاملاً معقول"]
 
 
 
 
 
 
1301
  }
1302
  ]
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1303
  }
1304
  ]
 
 
 
 
1305
 
1306
  # دریافت گروه جاری
1307
+ current_group = question_groups[0]
 
 
1308
  st.markdown(f"<h3>{current_group['title']}</h3>")
1309
+
1310
+ for question in current_group["questions"]:
 
 
1311
  answer = custom_likert_slider(question)
1312
+ # مقدار انتخابی را در session_state ذخیره می‌کنیم
1313
+ st.session_state[question["key"]] = answer
1314
+
1315
+ # دکمه ادامه
1316
+ if st.button("ادامه"):
1317
+ st.write("مقادیر انتخابی ذخیره شده در session_state:")
1318
+ st.write(st.session_state) # نمایش محتویات session_state برای بررسی
1319
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1320
 
1321
  def explanation_questions():
1322
  """نمایش سوالات تکمیلی به صورت مرحله‌ای با دکمه ادامه"""