147 lines
4.4 KiB
Python
147 lines
4.4 KiB
Python
"""
|
|
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()
|