GSMEthesis commited on
Commit
0afad43
·
verified ·
1 Parent(s): 286d1f4

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +33 -61
app.py CHANGED
@@ -739,70 +739,46 @@ 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 = (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>
758
- <div style="display: flex; justify-content: space-between; font-size: 12px; margin-bottom: 5px;">
 
 
 
 
 
 
 
 
 
 
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}')">
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
- window.parent.postMessage({{
778
- type: 'streamlit:setComponentValue',
779
- value: value,
780
- key: key
781
- }}, '*');
782
-
783
- // دیباگ: چاپ مقدار در کنسول مرورگر
784
- console.log('Slider key: ' + key + ', Value: ' + value);
785
- }}
786
 
787
- // تنظیم مقدار اولیه
788
- document.getElementById('{key}').value = {current_value};
789
- document.getElementById('output_{key}').innerText = {current_value};
790
- </script>
791
- """
792
-
793
- # نمایش کامپوننت
794
- components.html(html, height=150)
795
-
796
- # دریافت مقدار از Streamlit
797
- component_value = st.session_state.get(key, default_value)
798
-
799
- # دیباگ: نمایش مقدار دریافت‌شده
800
- st.write(f"Debug: مقدار دریافت‌شده برای {key}: {component_value}")
801
-
802
  # ذخیره مقدار در session_state
803
- st.session_state[key] = component_value
804
-
805
- return component_value
806
 
807
  def create_ride_map():
808
  """ایجاد نقشه سفر با Folium - نسخه اصلاح شده با مناطق عمومی"""
@@ -1224,7 +1200,7 @@ def random_likert_questions():
1224
  "key": "distributive_1",
1225
  "question": "قیمتی که به شما ارائه شد، چگونه بود؟",
1226
  "scale": 7,
1227
- "labels": ["کاملاً نامنصفانه", "کاملاً منصفانه"]
1228
  },
1229
  {
1230
  "key": "distributive_2",
@@ -1244,7 +1220,7 @@ def random_likert_questions():
1244
  "title": "سوال توجه",
1245
  "key": "attention_check",
1246
  "questions": [
1247
- {"key": "attention_check2", "question": "تا چه مقدار با دقت به سوالات پاسخ می‌دهید؟", "scale": 7, "labels": ["خیلی کم", "خیلی زیاد"]}
1248
  ]
1249
  },
1250
  {
@@ -1269,6 +1245,7 @@ def random_likert_questions():
1269
  }
1270
  ]
1271
 
 
1272
  # مقداردهی اولیه
1273
  if 'current_likert_group' not in st.session_state:
1274
  st.session_state.current_likert_group = 0
@@ -1304,17 +1281,12 @@ def random_likert_questions():
1304
  for question in current_group['questions']:
1305
  answer = custom_likert_slider(question)
1306
  st.session_state.answers[question["key"]] = answer
1307
- st.write(f"Debug: پاسخ ذخیره‌شده برای {question['key']}: {st.session_state.answers[question['key']]}")
1308
-
1309
- # دیباگ: نمایش کل session_state
1310
- st.write("Debug: کل session_state:", st.session_state)
1311
 
1312
  # دکمه ادامه/اتمام
1313
  button_label = "ادامه به گروه بعدی" if st.session_state.current_likert_group < len(question_groups)-1 else "اتمام پرسشنامه"
1314
 
1315
  if st.button(button_label):
1316
- # بررسی مقادیر ذخیره‌شده قبل از رفتن به گروه بعدی
1317
- st.write("Debug: مقادیر ذخیره‌شده قبل از ادامه:", st.session_state.answers)
1318
  # رفتن به گروه بعدی یا صفحه پایانی
1319
  if st.session_state.current_likert_group < len(question_groups) - 1:
1320
  st.session_state.current_likert_group += 1
 
739
 
740
  # ========== توابع اصلی ==========
741
  def custom_likert_slider(question_data):
742
+ """نمایش سوال لیکرت با اسلایدر استاندارد Streamlit"""
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
+ # نمایش سوال
752
+ st.markdown(f"<p style='font-size:16px; margin-bottom:5px;'>{question}</p>", unsafe_allow_html=True)
753
+
754
+ # اسلایدر استاندارد Streamlit
755
+ value = st.slider(
756
+ "",
757
+ min_value=1,
758
+ max_value=points,
759
+ value=default_value,
760
+ step=1,
761
+ key=key,
762
+ format="%d"
763
+ )
764
+
765
+ # نمایش لیبل‌های دو طرف
766
+ st.markdown(
767
+ f"""
768
+ <div style='display: flex; justify-content: space-between; font-size: 12px; margin-bottom: 5px;'>
769
  <span>{labels[0]}</span>
770
  <span>{labels[1]}</span>
771
  </div>
772
+ <p style='text-align:center; color:#6a0dad; font-weight:bold;'>
773
+ پاسخ انتخاب‌شده: {value}
774
+ </p>
775
+ """,
776
+ unsafe_allow_html=True
777
+ )
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
778
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
779
  # ذخیره مقدار در session_state
780
+ st.session_state[key] = value
781
+ return value
 
782
 
783
  def create_ride_map():
784
  """ایجاد نقشه سفر با Folium - نسخه اصلاح شده با مناطق عمومی"""
 
1200
  "key": "distributive_1",
1201
  "question": "قیمتی که به شما ارائه شد، چگونه بود؟",
1202
  "scale": 7,
1203
+ "labels": ["کاملاً نامنصفانه", "کاملاً منصفانه"] # لیبل‌های سفارشی برای این سوال
1204
  },
1205
  {
1206
  "key": "distributive_2",
 
1220
  "title": "سوال توجه",
1221
  "key": "attention_check",
1222
  "questions": [
1223
+ {"key": "attention_check2", "question": "تا چه مقدار با دقت به سوالات پاسخ می‌دهید؟", "scale": 7,"labels": ["خیلی کم", "خیلی زیاد"]}
1224
  ]
1225
  },
1226
  {
 
1245
  }
1246
  ]
1247
 
1248
+
1249
  # مقداردهی اولیه
1250
  if 'current_likert_group' not in st.session_state:
1251
  st.session_state.current_likert_group = 0
 
1281
  for question in current_group['questions']:
1282
  answer = custom_likert_slider(question)
1283
  st.session_state.answers[question["key"]] = answer
1284
+
 
 
 
1285
 
1286
  # دکمه ادامه/اتمام
1287
  button_label = "ادامه به گروه بعدی" if st.session_state.current_likert_group < len(question_groups)-1 else "اتمام پرسشنامه"
1288
 
1289
  if st.button(button_label):
 
 
1290
  # رفتن به گروه بعدی یا صفحه پایانی
1291
  if st.session_state.current_likert_group < len(question_groups) - 1:
1292
  st.session_state.current_likert_group += 1