GSMEthesis commited on
Commit
3c43f9c
·
verified ·
1 Parent(s): 080f323

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +78 -43
app.py CHANGED
@@ -992,39 +992,6 @@ def save_to_sheet(data):
992
  st.error(f"خطا در ذخیره‌سازی: {str(e)}")
993
  return False
994
 
995
- def create_likert_question(question, key, scale_type="5point"):
996
- """نمایش سوال لیکرت با اسلایدر نقطه‌ای"""
997
- # تعریف لیبل‌های دو طرف
998
- left_label = "کاملاً مخالفم" if scale_type == "7point" else "کاملاً مخالفم"
999
- right_label = "کاملاً موافقم" if scale_type == "7point" else "کاملاً موافقم"
1000
-
1001
- st.markdown(f"<p style='font-size:16px; margin-bottom:5px;'>{question}</p>", unsafe_allow_html=True)
1002
-
1003
- # ایجاد اسلایدر
1004
- max_value = 7 if scale_type == "7point" else 5
1005
- value = st.slider(
1006
- "",
1007
- min_value=1,
1008
- max_value=max_value,
1009
- value=(max_value+1)//2, # مقدار میانی
1010
- step=1,
1011
- key=f"slider_{key}"
1012
- )
1013
-
1014
- # نمایش متن دو طرف اسلایدر
1015
- st.markdown(
1016
- f"""
1017
- <div class="slider-labels">
1018
- <span>{left_label}</span>
1019
- <span>{right_label}</span>
1020
- </div>
1021
- <p style='text-align:center; color:#6a0dad; font-weight:bold;'>
1022
- پاسخ شما: {value}
1023
- </p>
1024
- """,
1025
- unsafe_allow_html=True
1026
- )
1027
- return value
1028
 
1029
  # ========== بخش‌های فرم ==========
1030
 
@@ -1202,23 +1169,57 @@ def attention_check1():
1202
  st.warning("لطفاً یک گزینه را انتخاب کنید")
1203
 
1204
  def random_likert_questions():
1205
- """نمایش سوالات لیکرت با تابع پیشرفته"""
1206
  question_groups = [
1207
  {
1208
  "title": "عدالت توزیعی",
1209
  "key": "distributive",
1210
  "questions": [
1211
- {"key": "distributive_1", "question": "قیمت ارائه شده چقدر منصفانه بود؟", "scale": 5, "labels": ["کاملاً نامنصفانه", "کاملاً منصفانه"]},
1212
- {"key": "distributive_2", "question": "قیمت ارائه شده چقدر معقول بود؟", "scale": 5, "labels": ["کاملاً غیرمعقول", "کاملاً معقول"]},
1213
- {"key": "distributive_3", "question": "قیمت ارائه شده چقدر قابل قبول بود؟", "scale": 5, "labels": ["کاملاً غیرقابل قبول", "کاملاً قابل قبول"]}
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1214
  ]
1215
  },
1216
  {
1217
  "title": "عدالت رویه‌ای",
1218
  "key": "procedural",
1219
  "questions": [
1220
- {"key": "procedural_1", "question": "رویه قیمت‌گذاری چقدر قابل قبول است؟", "scale": 5, "labels": ["کاملاً غیرقابل قبول", "کاملاً قابل قبول"]},
1221
- {"key": "procedural_2", "question": "رویه قیمت‌گذاری چقدر منصفانه است؟", "scale": 5, "labels": ["کاملاً نامنصفانه", "کاملاً منصفانه"]}
 
 
 
 
 
 
 
 
 
 
 
 
1222
  ]
1223
  }
1224
  ]
@@ -1226,18 +1227,52 @@ def random_likert_questions():
1226
  # مقداردهی اولیه
1227
  if 'current_likert_group' not in st.session_state:
1228
  st.session_state.current_likert_group = 0
 
1229
 
1230
  current_group = question_groups[st.session_state.current_likert_group]
1231
 
1232
  st.markdown(f"### {current_group['title']}")
1233
 
1234
- # نمایش همه سوالات گروه جاری
1235
  for question in current_group['questions']:
1236
- answer = enhanced_likert_scale(question)
1237
- st.session_state[question["key"]] = answer # ذخیره پاسخ با کلید اصلی
1238
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1239
  # دکمه ادامه/اتمام
1240
- if st.button("ادامه" if st.session_state.current_likert_group < len(question_groups)-1 else "اتمام"):
 
 
 
 
 
 
1241
  if st.session_state.current_likert_group < len(question_groups) - 1:
1242
  st.session_state.current_likert_group += 1
1243
  st.rerun()
 
992
  st.error(f"خطا در ذخیره‌سازی: {str(e)}")
993
  return False
994
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
995
 
996
  # ========== بخش‌های فرم ==========
997
 
 
1169
  st.warning("لطفاً یک گزینه را انتخاب کنید")
1170
 
1171
  def random_likert_questions():
1172
+ """نمایش سوالات لیکرت به صورت گروهی با ذخیره‌سازی صحیح"""
1173
  question_groups = [
1174
  {
1175
  "title": "عدالت توزیعی",
1176
  "key": "distributive",
1177
  "questions": [
1178
+ {
1179
+ "key": "distributive_1",
1180
+ "question": "قیمتی که به شما ارائه شد، چگونه بود؟",
1181
+ "scale": 7,
1182
+ "labels": ["کاملاً نامنصفانه", "کاملاً منصفانه"]
1183
+ },
1184
+ {
1185
+ "key": "distributive_2",
1186
+ "question": "قیمتی که به شما ارائه شد، چگونه بود؟",
1187
+ "scale": 7,
1188
+ "labels": ["کاملاً غیرمعقول", "کاملاً معقول"]
1189
+ },
1190
+ {
1191
+ "key": "distributive_3",
1192
+ "question": "قیمتی که به شما ارائه شد، چگونه بود؟",
1193
+ "scale": 7,
1194
+ "labels": ["کاملاً غیرقابل قبول", "کاملاً قابل قبول"]
1195
+ }
1196
+ ]
1197
+ },
1198
+ {
1199
+ "title": "سوال توجه",
1200
+ "key": "attention_check",
1201
+ "questions": [
1202
+ {"key": "attention_check2", "question": "تا چه مقدار با دقت به سوالات پاسخ می‌دهید؟", "scale": 7,"labels": ["خیلی کم", "خیلی زیاد"]}
1203
  ]
1204
  },
1205
  {
1206
  "title": "عدالت رویه‌ای",
1207
  "key": "procedural",
1208
  "questions": [
1209
+ {"key": "procedural_1", "question": "رآیند و رویه قیمت‌گذاری پلتفرم قابل قبول است", "scale": 7, "labels": ["کاملاً مخالفم", "کاملاً موافقم"]},
1210
+ {"key": "procedural_2", "question": "رآیند و رویه قیمت‌گذاری پلتفرم منصفانه است", "scale": 7, "labels": ["کاملاً مخالفم", "کاملاً موافقم"]},
1211
+ {"key": "procedural_3", "question": ".فرآیند و رویه قیمت‌گذاری پلتفرم معقول است", "scale": 7, "labels": ["کاملاً مخالفم", "کاملاً موافقم"]}
1212
+ ]
1213
+ },
1214
+ {
1215
+ "title": "عدالت اطلاعاتی",
1216
+ "key": "informational",
1217
+ "questions": [
1218
+ {"key": "informational_1", "question": "تا چه حد رهیار دلایل تعیین قیمت را به صورت صادقانه توضیح داد؟", "scale": 7, "labels": ["هیچ", "خیلی زیاد"]},
1219
+ {"key": "informational_2", "question": "تا چه حد رهیار عوامل مؤثر بر تعیین قیمت را به طور کامل شرح داد؟", "scale": 7, "labels": ["هیچ", "خیلی زیاد"]},
1220
+ {"key": "informational_3", "question": "تا چه حد دلایل ارائه‌شده توسط رهیار برای تعیین قیمت منطقی و قابل قبول بود؟", "scale": 7, "labels": ["هیچ", "خیلی زیاد"]},
1221
+ {"key": "informational_4", "question": "تا چه حد توضیحات درباره تعیین قیمت بلافاصله و در زمان مناسب نمایش داده شد؟", "scale": 7, "labels": ["هیچ", "خیلی زیاد"]},
1222
+ {"key": "informational_5", "question": "تا چه حد توضیحات رهیار درباره تعیین قیمت، متناسب با شرایط سفر شما بود؟", "scale": 7, "labels": ["هیچ", "خیلی زیاد"]}
1223
  ]
1224
  }
1225
  ]
 
1227
  # مقداردهی اولیه
1228
  if 'current_likert_group' not in st.session_state:
1229
  st.session_state.current_likert_group = 0
1230
+ st.session_state.likert_answers = {}
1231
 
1232
  current_group = question_groups[st.session_state.current_likert_group]
1233
 
1234
  st.markdown(f"### {current_group['title']}")
1235
 
1236
+ # نمایش تمام سوالات این گروه
1237
  for question in current_group['questions']:
1238
+ st.markdown(f"<p style='font-size:16px; margin-bottom:5px;'>{question['question']}</p>", unsafe_allow_html=True)
 
1239
 
1240
+ # ایجاد اسلایدر لیکرت
1241
+ max_value = question['scale']
1242
+ value = st.slider(
1243
+ "",
1244
+ min_value=1,
1245
+ max_value=max_value,
1246
+ value=st.session_state.likert_answers.get(question["key"], (max_value+1)//2),
1247
+ step=1,
1248
+ key=f"slider_{question['key']}"
1249
+ )
1250
+
1251
+ # نمایش لیبل‌ها و مقدار انتخاب شده
1252
+ st.markdown(
1253
+ f"""
1254
+ <div style="display: flex; justify-content: space-between; margin-top: -15px;">
1255
+ <span>{question['labels'][0]}</span>
1256
+ <span>{question['labels'][1]}</span>
1257
+ </div>
1258
+ <p style='text-align:center; color:#6a0dad; font-weight:bold;'>
1259
+ پاسخ شما: {value} ({'کاملاً مخالفم' if value==1 else 'کاملاً موافقم' if value==max_value else 'خنثی' if value==((max_value+1)//2) else 'موافقم' if value>((max_value+1)//2) else 'مخالفم'})
1260
+ </p>
1261
+ """,
1262
+ unsafe_allow_html=True
1263
+ )
1264
+
1265
+ # ذخیره پاسخ
1266
+ st.session_state.likert_answers[question["key"]] = value
1267
+
1268
  # دکمه ادامه/اتمام
1269
+ button_label = "ادامه به گروه بعدی" if st.session_state.current_likert_group < len(question_groups)-1 else "اتمام پرسشنامه"
1270
+
1271
+ if st.button(button_label):
1272
+ # ذخیره تمام پاسخ‌های این گروه در session اصلی
1273
+ for q in current_group['questions']:
1274
+ st.session_state[q["key"]] = st.session_state.likert_answers.get(q["key"], (q['scale']+1)//2)
1275
+
1276
  if st.session_state.current_likert_group < len(question_groups) - 1:
1277
  st.session_state.current_likert_group += 1
1278
  st.rerun()