GSMEthesis commited on
Commit
68490b0
·
verified ·
1 Parent(s): f135515

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +43 -27
app.py CHANGED
@@ -740,7 +740,7 @@ h3 {
740
 
741
  # ========== توابع اصلی ==========
742
  def custom_likert_slider(question_data):
743
- """نمایش سوال لیکرت با اسلایدر و طیف رنگی Plotly"""
744
  question = question_data["question"]
745
  key = question_data["key"]
746
  points = question_data["scale"]
@@ -751,38 +751,28 @@ def custom_likert_slider(question_data):
751
 
752
  st.markdown(f"**{question}**")
753
 
754
- # ایجاد اسلایدر عددی
755
- selected = st.slider(
756
- "انتخاب شدت",
757
- min_value=0,
758
- max_value=points-1,
759
- value=default_value,
760
- step=1,
761
- key=f"slider_{key}",
762
- label_visibility="collapsed"
763
- )
764
-
765
- # ذخیره فوری مقدار در session_state
766
- st.session_state.answers[key] = selected
767
- st.session_state[key] = selected
768
 
769
  # نمایش طیف با رنگ بنفش روی گزینه انتخاب‌شده
770
  fig = go.Figure()
771
 
772
  positions = list(range(points))
 
 
773
  fig.add_trace(go.Scatter(
774
  x=positions,
775
  y=[0]*points,
776
  mode='markers+text',
777
  marker=dict(
778
- size=25,
779
- color=['#d1c4e9' if i != selected else '#6a0dad' for i in positions],
780
  line=dict(width=2, color='#6a0dad')
781
  ),
782
- text=labels if len(labels) == points else positions,
783
  textposition="top center",
784
  textfont=dict(size=14)
785
- ))
786
 
787
  # خط اتصال نقاط
788
  fig.add_trace(go.Scatter(
@@ -793,11 +783,12 @@ def custom_likert_slider(question_data):
793
  hoverinfo='none'
794
  ))
795
 
 
796
  fig.update_layout(
797
  xaxis=dict(
798
  tickmode='array',
799
  tickvals=positions,
800
- ticktext=labels if len(labels) == points else positions,
801
  showgrid=False,
802
  zeroline=False,
803
  range=[-0.5, points-0.5]
@@ -806,17 +797,42 @@ def custom_likert_slider(question_data):
806
  margin=dict(l=20, r=20, t=40, b=20),
807
  height=150,
808
  showlegend=False,
809
- hovermode=False
 
810
  )
811
 
812
- st.plotly_chart(fig, use_container_width=True, config={'staticPlot': True})
 
 
 
 
 
 
 
813
 
814
- # نمایش انتخاب
815
- selected_label = labels[selected] if len(labels) > selected else str(selected+1)
816
- st.markdown(f"<p style='text-align:center; color:#6a0dad; font-weight:bold;'>پاسخ شما: <strong>{selected_label}</strong></p>",
817
- unsafe_allow_html=True)
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
818
 
819
- return selected
820
 
821
  def create_ride_map():
822
  """ایجاد نقشه سفر با Folium - نسخه اصلاح شده با مناطق عمومی"""
 
740
 
741
  # ========== توابع اصلی ==========
742
  def custom_likert_slider(question_data):
743
+ """نمایش سوال لیکرت با طیف رنگی Plotly و بدون اسلایدر قابل مشاهده"""
744
  question = question_data["question"]
745
  key = question_data["key"]
746
  points = question_data["scale"]
 
751
 
752
  st.markdown(f"**{question}**")
753
 
754
+ # ایجاد یک container برای نمایش طیف
755
+ container = st.container()
 
 
 
 
 
 
 
 
 
 
 
 
756
 
757
  # نمایش طیف با رنگ بنفش روی گزینه انتخاب‌شده
758
  fig = go.Figure()
759
 
760
  positions = list(range(points))
761
+
762
+ # اضافه کردن نقاط به نمودار
763
  fig.add_trace(go.Scatter(
764
  x=positions,
765
  y=[0]*points,
766
  mode='markers+text',
767
  marker=dict(
768
+ size=30,
769
+ color=['#d1c4e9' if i != st.session_state.answers.get(key, default_value) else '#6a0dad' for i in positions],
770
  line=dict(width=2, color='#6a0dad')
771
  ),
772
+ text=labels if len(labels) == points else [str(i+1) for i in positions],
773
  textposition="top center",
774
  textfont=dict(size=14)
775
+ )
776
 
777
  # خط اتصال نقاط
778
  fig.add_trace(go.Scatter(
 
783
  hoverinfo='none'
784
  ))
785
 
786
+ # تنظیمات layout
787
  fig.update_layout(
788
  xaxis=dict(
789
  tickmode='array',
790
  tickvals=positions,
791
+ ticktext=labels if len(labels) == points else [str(i+1) for i in positions],
792
  showgrid=False,
793
  zeroline=False,
794
  range=[-0.5, points-0.5]
 
797
  margin=dict(l=20, r=20, t=40, b=20),
798
  height=150,
799
  showlegend=False,
800
+ hovermode=False,
801
+ clickmode='event+select'
802
  )
803
 
804
+ # نمایش نمودار در container
805
+ with container:
806
+ selected_point = st.plotly_chart(
807
+ fig,
808
+ use_container_width=True,
809
+ config={'staticPlot': False},
810
+ key=f"plot_{key}"
811
+ )
812
 
813
+ # استفاده از st.slider مخفی برای مدیریت انتخاب
814
+ selected_value = st.slider(
815
+ "",
816
+ min_value=0,
817
+ max_value=points-1,
818
+ value=st.session_state.answers.get(key, default_value),
819
+ step=1,
820
+ key=f"hidden_slider_{key}",
821
+ label_visibility="collapsed"
822
+ )
823
+
824
+ # ذخیره مقدار انتخاب شده
825
+ st.session_state.answers[key] = selected_value
826
+ st.session_state[key] = selected_value
827
+
828
+ # نمایش انتخاب کاربر
829
+ selected_label = labels[selected_value] if len(labels) > selected_value else str(selected_value+1)
830
+ st.markdown(
831
+ f"<p style='text-align:center; color:#6a0dad; font-weight:bold;'>پاسخ شما: <strong>{selected_label}</strong></p>",
832
+ unsafe_allow_html=True
833
+ )
834
 
835
+ return selected_value
836
 
837
  def create_ride_map():
838
  """ایجاد نقشه سفر با Folium - نسخه اصلاح شده با مناطق عمومی"""