Interfaz gráfica de usuario de Python (personalizada) ejecutada en JMPHola a todos,
Tengo un paquete de Python personalizado que utiliza interfaces gráficas de usuario para obtener la entrada del usuario. Ahora quiero ejecutar este paquete desde JMP18.
PY_SCRIPT = "
from mydummy.util import jmp
from mydummy.request import this_data
df = this_data().GUI()
jmp_source = jmp.df2jmp(df, 'MY DT')
";
EXECUTE = Python Execute({}, {jmp_source}, PY_SCRIPT);
If(EXECUTE == 0,
DT = Eval(Parse(jmp_source));
,
DT = New Table();
);En general, este script funciona. Crea la interfaz gráfica de usuario, procesa los datos en Python, los convierte en un script de tabla JMP y, a partir de ahí, puedo usar JSL como de costumbre para el análisis de datos y los gráficos.
Sin embargo, Python Execute (así como Run Programm) siempre congela todo en JMP. Por lo tanto, cuando la GUI está abierta y el código Python se está ejecutando, ya no puedo hacer nada en JMP. ¿Hay alguna manera de iniciar una nueva instancia de la instancia '~JMP\JMPPRO\18\jmp_python.exe'?
También probé un script de Python usando subprocess.Popen. Si espero el retorno, tengo los mismos problemas.
Mi GUI necesita el hilo principal, por lo que el subprocesamiento tampoco es posible; de alguna manera, necesito crear una nueva instancia ~jmp_python.exe o jsl puede manejarlo.
¿Alguna sugerencia? ¿Es posible?
Gracias
Automatización y scriptingRe: GUI de Python (personalizada) ejecutada en JMPLa integración de JMP con Python se ejecuta en el hilo principal, por lo que la interfaz de usuario toma el control y bloquea JMP. Puede probar el subproceso para especificar e iniciar una copia de jmp_python.exe iniciada desde la línea de comandos. Es por eso que existen las variables jmp.PYTHON_EXE y jmp.PYTHONW_EXE (creo que PYTHONW_EXE puede ser 19+). Pero desde el subproceso no podrá utilizar el paquete saltar .
Otros problemas que puede encontrar al ejecutar una interfaz gráfica de usuario de Python es que toma el control del bucle principal y, cuando se cierra el último cuadro de diálogo, puede provocar que JMP se bloquee, ya que al salir del bucle principal de la interfaz gráfica de usuario de Python se pueden eliminar elementos del menú, controladores de ventanas, etc. de los que depende JMP. Es peligroso, ya que está intentando cargar un conjunto de herramientas de interfaz de usuario diferente a través de Python que está integrado en una aplicación de interfaz gráfica de usuario...
Creo que actualmente la mejor manera de hacerlo es escribir la GUI utilizando cuadros de diálogo y ventanas creados con JSL que se pueden llamar desde Python utilizando jmp.run_jsl. Puedes hacerlo en el script de ejemplo pyDigest.py donde se utiliza un selector de directorio JSL para obtener la ruta a un directorio.
jmp.run_jsl('''
localPath = Pick Directory("Choose Directory to checksum");
// Pick Directory on windows returns a leading / use Convert File Path()
If( Host is("Windows"),
localpath = Convert File Path( localPath, windows )
);
El uso de las funciones de ventana y diálogo de JMP es compatible. Estamos investigando el problema de la interfaz de usuario externa.
Re: GUI de Python (personalizada) ejecutada en JMPRunProgram congela JMP porque, sin una ReadFunction, recopila toda la salida antes de regresar. También se puede utilizar con una ReadFunction que se llama cuando JMP está inactivo o durante una espera (0), lo que permite que JMP realice otro trabajo siempre que haya algún tiempo de inactividad. Crea un vídeo en JMP con FFmpeg tiene un ejemplo de una ReadFunction simple que lee desde el programa externo y escribe lo que lee en el registro de JMP.