(Personalizzata) GUI Python eseguita in JMPCiao a tutti,
Ho un pacchetto python personalizzato che usa le GUI per ottenere l'input dell'utente. Ora voglio eseguire questo pacchetto da 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();
);In generale questo script funziona. Crea la GUI, elabora i dati in python, li converte in uno script JMP-Table e da lì in poi posso usare JSL come al solito per analisi/grafica dei dati.
Tuttavia, Python Execute (così come Run Programm) blocca sempre tutto in JMP. Quindi, quando la GUI è aperta e il codice python è in esecuzione, non posso più fare nulla in JMP. C'è un modo per avviare una nuova istanza dell'istanza '~JMP\JMPPRO\18\jmp_python.exe'?
Ho anche provato uno script python usando subprocess.Popen. Se aspetto il ritorno ho gli stessi problemi.
La mia GUI ha bisogno del thread principale, quindi il threading non è possibile: in qualche modo devo creare una nuova istanza di ~jmp_python.exe, altrimenti jsl può gestirlo.
Avete suggerimenti? È possibile?
Grazie
Automazione e scriptingRe: GUI Python (personalizzata) eseguita in JMPJMP Python Integration è in esecuzione sul thread principale, motivo per cui la tua interfaccia utente prende il sopravvento e blocca JMP. Puoi provare il sottoprocesso per specificare e avviare una copia di jmp_python.exe avviata dalla riga di comando. Ecco perché esistono le variabili jmp.PYTHON_EXE e jmp.PYTHONW_EXE. (Penso che PYTHONW_EXE possa essere 19+). Ma dal sottoprocesso non sarai in grado di utilizzare il pacchetto gimp .
Altri problemi che potresti riscontrare eseguendo una GUI Python sono che prende il sopravvento sul mainloop e quando l'ultima finestra di dialogo si chiude potrebbe causare l'arresto anomalo di JMP, perché l'uscita dal mainloop della GUI Python può eliminare voci di menu, handle delle finestre,... da cui dipende JMP. È rischioso, poiché stai tentando di caricare un toolkit UI diverso tramite Python che è incorporato in un'applicazione GUI...
Credo che al momento il modo migliore per farlo sia scrivere la GUI usando dialoghi e finestre creati in JSL che possono essere richiamati da Python usando jmp.run_jsl. Puoi farlo nello script di esempio pyDigest.py dove un JSL Directory Picker viene usato per ottenere il percorso di una directory.
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 )
);
L'utilizzo delle funzionalità di dialogo e finestra di JMP è compatibile. Stiamo esaminando il problema dell'interfaccia utente esterna.
Re: GUI Python (personalizzata) eseguita in JMPRunProgram blocca JMP perché, senza una ReadFunction, raccoglie tutto l'output prima di tornare indietro. Può anche essere usato con una ReadFunction che viene chiamata quando JMP è inattivo, o durante un wait(0), consentendo a JMP di fare altro lavoro finché c'è un po' di tempo di inattività. Crea un video in JMP con FFmpeg ha un esempio di una semplice ReadFunction che legge dal programma esterno e scrive ciò che ha letto nel log JMP.