GSMEthesis commited on
Commit
e2c9633
·
verified ·
1 Parent(s): 313bf01

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +52 -19
app.py CHANGED
@@ -739,16 +739,19 @@ h3 {
739
 
740
  # ========== توابع اصلی ==========
741
  def custom_likert_slider(question_data):
742
- """نمایش سوال لیکرت با اسلایدر نقطه‌ای و لیبل‌های سفارشی"""
743
  question = question_data["question"]
744
  key = question_data["key"]
745
  points = question_data["scale"]
746
  labels = question_data.get("labels", ["کمترین", "بیشترین"]) # لیبل‌های پیش‌فرض
747
 
748
  # مقدار پیش‌فرض (وسط طیف)
749
- default_value = st.session_state.get(key, (points + 1) // 2)
750
 
751
- # HTML و JavaScript
 
 
 
752
  html = f"""
753
  <div id="container_{key}" style="direction: ltr; font-family: 'B Nazanin'; margin-bottom: 30px;">
754
  <label style="font-size: 16px; font-weight: bold; display: block; text-align: right;">{question}</label>
@@ -756,34 +759,54 @@ def custom_likert_slider(question_data):
756
  <span>{labels[0]}</span>
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
- oninput="updateSlider('{key}')">
762
  <div style="text-align: center; margin-top: 10px; direction: rtl;">
763
- پاسخ انتخاب‌شده: <strong><span id="output_{key}">{default_value}</span></strong>
764
  </div>
765
  </div>
766
 
767
  <script>
768
  function updateSlider(key) {{
769
- const value = parseInt(document.getElementById(key).value);
 
770
  document.getElementById('output_' + key).innerText = value;
771
 
772
  // ارسال مقدار به Streamlit
773
- window.parent.postMessage({{
774
  type: 'streamlit:setComponentValue',
775
- key: key,
776
- value: value
777
- }}, '*');
 
 
 
 
778
  }}
 
 
 
 
779
  </script>
780
  """
781
 
782
- # نمایش کامپوننت
783
- components.html(html, height=150)
 
 
 
 
 
 
 
 
 
 
 
 
784
 
785
- # مقدار نهایی
786
- return st.session_state.get(key, default_value)
787
 
788
  def create_ride_map():
789
  """ایجاد نقشه سفر با Folium - نسخه اصلاح شده با مناطق عمومی"""
@@ -1205,7 +1228,7 @@ def random_likert_questions():
1205
  "key": "distributive_1",
1206
  "question": "قیمتی که به شما ارائه شد، چگونه بود؟",
1207
  "scale": 7,
1208
- "labels": ["کاملاً نامنصفانه", "کاملاً منصفانه"] # لیبل‌های سفارشی برای این سوال
1209
  },
1210
  {
1211
  "key": "distributive_2",
@@ -1225,7 +1248,7 @@ def random_likert_questions():
1225
  "title": "سوال توجه",
1226
  "key": "attention_check",
1227
  "questions": [
1228
- {"key": "attention_check2", "question": "تا چه مقدار با دقت به سوالات پاسخ می‌دهید؟", "scale": 7,"labels": ["خیلی کم", "خیلی زیاد"]}
1229
  ]
1230
  },
1231
  {
@@ -1250,7 +1273,6 @@ def random_likert_questions():
1250
  }
1251
  ]
1252
 
1253
-
1254
  # مقداردهی اولیه
1255
  if 'current_likert_group' not in st.session_state:
1256
  st.session_state.current_likert_group = 0
@@ -1286,12 +1308,23 @@ def random_likert_questions():
1286
  for question in current_group['questions']:
1287
  answer = custom_likert_slider(question)
1288
  st.session_state.answers[question["key"]] = answer
1289
-
 
 
 
1290
 
1291
  # دکمه ادامه/اتمام
1292
  button_label = "ادامه به گروه بعدی" if st.session_state.current_likert_group < len(question_groups)-1 else "اتمام پرسشنامه"
1293
 
1294
  if st.button(button_label):
 
 
 
 
 
 
 
 
1295
  # رفتن به گروه بعدی یا صفحه پایانی
1296
  if st.session_state.current_likert_group < len(question_groups) - 1:
1297
  st.session_state.current_likert_group += 1
 
739
 
740
  # ========== توابع اصلی ==========
741
  def custom_likert_slider(question_data):
742
+ """نمایش سوال لیکرت با اسلایدر سفارشی و دیباگ کامل"""
743
  question = question_data["question"]
744
  key = question_data["key"]
745
  points = question_data["scale"]
746
  labels = question_data.get("labels", ["کمترین", "بیشترین"]) # لیبل‌های پیش‌فرض
747
 
748
  # مقدار پیش‌فرض (وسط طیف)
749
+ default_value = (points + 1) // 2
750
 
751
+ # مقدار فعلی از session_state
752
+ current_value = st.session_state.get(key, default_value)
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>
 
759
  <span>{labels[0]}</span>
760
  <span>{labels[1]}</span>
761
  </div>
762
+ <input type="range" id="{key}" min="1" max="{points}" step="1" value="{current_value}"
763
  style="width: 100%; height: 10px; accent-color: #6a0dad; margin-bottom: 15px;"
764
+ oninput="updateSlider('{key}')" onchange="updateSlider('{key}')">
765
  <div style="text-align: center; margin-top: 10px; direction: rtl;">
766
+ پاسخ انتخاب‌شده: <strong><span id="output_{key}">{current_value}</span></strong>
767
  </div>
768
  </div>
769
 
770
  <script>
771
  function updateSlider(key) {{
772
+ const slider = document.getElementById(key);
773
+ const value = parseInt(slider.value);
774
  document.getElementById('output_' + key).innerText = value;
775
 
776
  // ارسال مقدار به Streamlit
777
+ const message = {{
778
  type: 'streamlit:setComponentValue',
779
+ value: value,
780
+ key: key
781
+ }};
782
+ window.parent.postMessage(message, '*');
783
+
784
+ // دیباگ: چاپ پیام ارسالی
785
+ console.log('Sending to Streamlit: ', JSON.stringify(message));
786
  }}
787
+
788
+ // تنظیم مقدار اولیه
789
+ document.getElementById('{key}').value = {current_value};
790
+ document.getElementById('output_{key}').innerText = {current_value};
791
  </script>
792
  """
793
 
794
+ # نمایش کامپوننت با کلید منحصربه‌فرد
795
+ components.html(html, height=150, key=f"slider_{key}")
796
+
797
+ # دریافت مقدار از Streamlit
798
+ component_value = st.session_state.get(key, default_value)
799
+
800
+ # دیباگ: نمایش مقادیر
801
+ st.write(f"Debug: کلید: {key}")
802
+ st.write(f"Debug: مقدار پیش‌فرض: {default_value}")
803
+ st.write(f"Debug: مقدار دریافت‌شده: {component_value}")
804
+ st.write(f"Debug: مقدار در session_state[{key}]: {st.session_state.get(key, 'هیچ')}")
805
+
806
+ # ذخیره مقدار
807
+ st.session_state[key] = component_value
808
 
809
+ return component_value
 
810
 
811
  def create_ride_map():
812
  """ایجاد نقشه سفر با Folium - نسخه اصلاح شده با مناطق عمومی"""
 
1228
  "key": "distributive_1",
1229
  "question": "قیمتی که به شما ارائه شد، چگونه بود؟",
1230
  "scale": 7,
1231
+ "labels": ["کاملاً نامنصفانه", "کاملاً منصفانه"]
1232
  },
1233
  {
1234
  "key": "distributive_2",
 
1248
  "title": "سوال توجه",
1249
  "key": "attention_check",
1250
  "questions": [
1251
+ {"key": "attention_check2", "question": "تا چه مقدار با دقت به سوالات پاسخ می‌دهید؟", "scale": 7, "labels": ["خیلی کم", "خیلی زیاد"]}
1252
  ]
1253
  },
1254
  {
 
1273
  }
1274
  ]
1275
 
 
1276
  # مقداردهی اولیه
1277
  if 'current_likert_group' not in st.session_state:
1278
  st.session_state.current_likert_group = 0
 
1308
  for question in current_group['questions']:
1309
  answer = custom_likert_slider(question)
1310
  st.session_state.answers[question["key"]] = answer
1311
+ st.write(f"Debug: پاسخ ذخیره‌شده برای {question['key']}: {st.session_state.answers[question['key']]}")
1312
+
1313
+ # دیباگ: نمایش تمام پاسخ‌های ذخیره‌شده
1314
+ st.write("Debug: پاسخ‌های ذخیره‌شده تا الان:", st.session_state.answers)
1315
 
1316
  # دکمه ادامه/اتمام
1317
  button_label = "ادامه به گروه بعدی" if st.session_state.current_likert_group < len(question_groups)-1 else "اتمام پرسشنامه"
1318
 
1319
  if st.button(button_label):
1320
+ # ذخیره پاسخ‌ها قبل از رفتن به گروه بعدی
1321
+ for question in current_group['questions']:
1322
+ if question["key"] in st.session_state:
1323
+ st.session_state.answers[question["key"]] = st.session_state[question["key"]]
1324
+
1325
+ # دیباگ: نمایش پاسخ‌ها قبل از تغییر صفحه
1326
+ st.write("Debug: پاسخ‌های ذخیره‌شده قبل از ادامه:", st.session_state.answers)
1327
+
1328
  # رفتن به گروه بعدی یا صفحه پایانی
1329
  if st.session_state.current_likert_group < len(question_groups) - 1:
1330
  st.session_state.current_likert_group += 1