""" x8_manual_gui.py - Wrapper Simple para XML→SCL Este script es un wrapper simple que: 1. Abre un cuadro de diálogo para seleccionar archivo XML 2. Abre un cuadro de diálogo para seleccionar directorio de destino 3. Ejecuta automáticamente x0_main.py en modo simple No requiere GUI compleja, solo usa los cuadros de diálogo nativos de Windows. """ import tkinter as tk from tkinter import filedialog, messagebox import os import sys import subprocess def main(): """Función principal - Solo cuadros de diálogo y ejecución""" # Configurar el directorio de script script_dir = os.path.dirname(os.path.abspath(__file__)) x0_main_path = os.path.join(script_dir, "x0_main.py") # Verificar que x0_main.py existe if not os.path.exists(x0_main_path): print(f"Error: No se encontró x0_main.py en: {x0_main_path}", file=sys.stderr) sys.exit(1) print("=== XML -> SCL Converter ===") print("Selecciona el archivo XML y directorio de destino...") print() # Crear ventana oculta para los cuadros de diálogo root = tk.Tk() root.withdraw() # Ocultar la ventana principal try: # 1. Seleccionar archivo XML print("1. Seleccionando archivo XML...") source_xml = filedialog.askopenfilename( title="Seleccionar archivo XML de Siemens TIA Portal", filetypes=[("Archivos XML", "*.xml"), ("Todos los archivos", "*.*")], initialdir=script_dir, ) if not source_xml: print("Operación cancelada por el usuario.") sys.exit(0) print(f" Archivo seleccionado: {os.path.basename(source_xml)}") # 2. Seleccionar directorio de destino print("2. Seleccionando directorio de destino...") dest_dir = filedialog.askdirectory( title="Seleccionar directorio de destino", initialdir=script_dir ) if not dest_dir: print("Operación cancelada por el usuario.") sys.exit(0) print(f" Directorio seleccionado: {dest_dir}") # 3. Generar nombre de archivo de salida base_name = os.path.splitext(os.path.basename(source_xml))[0] dest_filename = f"{base_name}.scl" dest_scl = os.path.join(dest_dir, dest_filename) print(f"3. Archivo de salida: {dest_filename}") print() # 4. Confirmar operación confirm = messagebox.askyesno( "Confirmar Conversión", f"¿Convertir el archivo?\n\n" f"Origen: {os.path.basename(source_xml)}\n" f"Destino: {dest_scl}\n\n" f"¿Continuar?", ) if not confirm: print("Operación cancelada por el usuario.") sys.exit(0) # 5. Ejecutar conversión print("4. Ejecutando conversión...") print("=" * 50) cmd = [ sys.executable, x0_main_path, "--source-xml", source_xml, "--dest-scl", dest_scl, ] # Ejecutar proceso result = subprocess.run( cmd, cwd=script_dir, capture_output=False, # Mostrar salida en tiempo real text=True, ) # 6. Verificar resultado print("=" * 50) if result.returncode == 0 and os.path.exists(dest_scl): print("✅ CONVERSIÓN COMPLETADA EXITOSAMENTE") print(f"📁 Archivo generado: {dest_scl}") # Preguntar si abrir el directorio open_dir = messagebox.askyesno( "Conversión Exitosa", f"La conversión se completó exitosamente.\n\n" f"Archivo generado:\n{dest_scl}\n\n" f"¿Deseas abrir el directorio de destino?", ) if open_dir: os.startfile(dest_dir) else: print("❌ ERROR EN LA CONVERSIÓN") print("Revisa los mensajes de error arriba.") messagebox.showerror( "Error en Conversión", "La conversión falló. Revisa los mensajes de error en la consola.", ) except Exception as e: print(f"❌ ERROR INESPERADO: {e}") messagebox.showerror( "Error Inesperado", f"Error inesperado durante la conversión:\n{e}" ) sys.exit(1) finally: # Cerrar la ventana oculta root.destroy() if __name__ == "__main__": main()