agerhund commited on
Commit
a58ce0e
·
verified ·
1 Parent(s): a6f3241

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +27 -24
app.py CHANGED
@@ -140,32 +140,41 @@ st.header("1. Escaneo de Habitación")
140
 
141
  # --- LÓGICA DE SELECCIÓN DE EJEMPLOS EN EL CUERPO PRINCIPAL ---
142
  examples_dir = os.path.join(os.path.dirname(__file__), "examples")
 
 
143
 
144
  if os.path.exists(examples_dir):
145
  example_files = [f for f in os.listdir(examples_dir) if f.endswith(('.jpg', '.png'))]
146
  example_files.sort()
147
 
 
 
 
 
148
  col_select, col_download = st.columns([3, 1])
149
 
150
  with col_select:
151
- # Añadimos la opción de carga manual como la principal
152
- display_files = ["--- Cargar imagen manualmente (prioridad) ---"] + example_files
153
-
154
  selected_example_name = st.selectbox(
155
  "O usa una imagen de ejemplo:",
156
  display_files,
157
- key='example_select_box'
 
 
 
 
 
 
158
  )
159
 
160
- # Manejo de la selección del ejemplo
161
- if selected_example_name != display_files[0]:
162
- file_path = os.path.join(examples_dir, selected_example_name)
163
- st.session_state.source_file_path = file_path
164
- st.session_state.is_example = True
165
 
 
166
  with col_download:
 
167
  st.markdown(" ")
168
- with open(file_path, "rb") as file:
169
  st.download_button(
170
  label=f"⬇️ Descargar: {selected_example_name}",
171
  data=file,
@@ -174,29 +183,23 @@ if os.path.exists(examples_dir):
174
  )
175
 
176
  # Mostrar miniatura del ejemplo
177
- st.image(file_path, caption="Vista previa del ejemplo", use_container_width=True)
178
-
179
- else:
180
- # Limpiar las variables si se selecciona la opción nula
181
- if 'source_file_path' in st.session_state:
182
- del st.session_state.source_file_path
183
- st.session_state.is_example = False
184
-
185
 
186
- # 1. Selector de carga manual (Se mantiene aquí, pero solo para subir el archivo)
187
  uploaded_file = st.file_uploader("Sube tu imagen panorámica (360)", type=['jpg', 'png', 'jpeg'])
188
 
189
  # Determinar qué archivo usar (la carga manual tiene prioridad)
190
- source_file_path = st.session_state.get('source_file_path', None)
191
- is_example = st.session_state.get('is_example', False)
192
 
193
  if uploaded_file is not None:
194
  source_file = uploaded_file
195
  file_caption = 'Imagen subida'
196
  is_example = False
197
- elif source_file_path is not None and is_example == True:
198
- source_file = source_file_path
199
- file_caption = f'Imagen de ejemplo: {source_file_path.split(os.sep)[-1]}'
 
200
  else:
201
  source_file = None
202
 
 
140
 
141
  # --- LÓGICA DE SELECCIÓN DE EJEMPLOS EN EL CUERPO PRINCIPAL ---
142
  examples_dir = os.path.join(os.path.dirname(__file__), "examples")
143
+ source_file = None
144
+ file_caption = None
145
 
146
  if os.path.exists(examples_dir):
147
  example_files = [f for f in os.listdir(examples_dir) if f.endswith(('.jpg', '.png'))]
148
  example_files.sort()
149
 
150
+ # 1. Creamos el selector de ejemplos
151
+ display_files = ["--- Cargar imagen manualmente (prioridad) ---"] + example_files
152
+
153
+ # Usamos st.empty para evitar re-render innecesario al mostrar la imagen
154
  col_select, col_download = st.columns([3, 1])
155
 
156
  with col_select:
 
 
 
157
  selected_example_name = st.selectbox(
158
  "O usa una imagen de ejemplo:",
159
  display_files,
160
+ key='example_select_box',
161
+ # El on_change es clave para forzar la actualización solo cuando el valor cambia
162
+ on_change=lambda: st.session_state.update(
163
+ # Forzar el re-render solo si el valor ha cambiado
164
+ source_file_path=os.path.join(examples_dir, st.session_state.example_select_box) if st.session_state.example_select_box != display_files[0] else None,
165
+ is_example=st.session_state.example_select_box != display_files[0]
166
+ )
167
  )
168
 
169
+ # 2. Manejo de la selección del ejemplo
170
+ is_example_selected = st.session_state.get('is_example', False)
171
+ source_file_path = st.session_state.get('source_file_path', None)
 
 
172
 
173
+ if is_example_selected and source_file_path:
174
  with col_download:
175
+ # Poner el botón de descarga en la columna derecha
176
  st.markdown(" ")
177
+ with open(source_file_path, "rb") as file:
178
  st.download_button(
179
  label=f"⬇️ Descargar: {selected_example_name}",
180
  data=file,
 
183
  )
184
 
185
  # Mostrar miniatura del ejemplo
186
+ st.image(source_file_path, caption="Vista previa del ejemplo", use_container_width=True)
 
 
 
 
 
 
 
187
 
188
+ # 2. Selector de carga manual (Se mantiene aquí, pero solo para subir el archivo)
189
  uploaded_file = st.file_uploader("Sube tu imagen panorámica (360)", type=['jpg', 'png', 'jpeg'])
190
 
191
  # Determinar qué archivo usar (la carga manual tiene prioridad)
192
+ source_file_path_session = st.session_state.get('source_file_path', None)
193
+ is_example_session = st.session_state.get('is_example', False)
194
 
195
  if uploaded_file is not None:
196
  source_file = uploaded_file
197
  file_caption = 'Imagen subida'
198
  is_example = False
199
+ elif source_file_path_session and is_example_session:
200
+ source_file = source_file_path_session
201
+ file_caption = f'Imagen de ejemplo: {source_file_path_session.split(os.sep)[-1]}'
202
+ is_example = True
203
  else:
204
  source_file = None
205