(自訂)在 JMP 中執行的 Python GUI大家好,
我有一個自訂的 python 包,它使用 GUI 來獲取用戶輸入。我現在想從 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();
);整體來說這個腳本是可以工作的。它創建 GUI,用 python 處理數據,將其轉換為 JMP-Table-Script,然後我可以像往常一樣使用 JSL 進行數據分析/圖形處理。
但是,Python Execute(以及 Run Programm)總是會凍結 JMP 中的所有內容。因此,當 GUI 開啟並且 python 程式碼正在運行時,我無法再在 JMP 中執行任何操作。有沒有辦法啟動「~JMP\JMPPRO\18\jmp_python.exe」實例的新實例?
我還嘗試了使用 subprocess.Popen 的 python 腳本。如果我等待回報,我確實會遇到同樣的問題。
我的 GUI 需要主線程,因此線程化也是不可能的 - 我需要以某種方式創建一個新的 ~jmp_python.exe 實例或 jsl 可以處理它。
有什麼建議嗎?這可能嗎?
謝謝
自動化和腳本回覆:(自訂)在 JMP 中執行的 Python GUIJMP Python Integration 在主執行緒上運行,這就是您的 UI 接管並阻止 JMP 的原因。您可以嘗試子進程來指定並啟動透過命令列啟動的 jmp_python.exe 副本。這就是 jmp.PYTHON_EXE 和 jmp.PYTHONW_EXE 變數存在的原因。 (我認為 PYTHONW_EXE 可能是 19+)。但是在子進程中您將無法使用跳轉套件。
執行 Python GUI 時您可能會發現的其他問題是它接管了主循環,並且當最後一個對話方塊關閉時可能會導致 JMP 崩潰,因為退出 Python GUI 主循環可以取出 JMP 所依賴的選單項目、視窗句柄…。這是很危險的,因為您正在嘗試透過嵌入在 GUI 應用程式中的 Python 來載入不同的 UI 工具包…
我認為目前最好的方法是使用 JSL 建立的對話框和視窗編寫 GUI,可以使用 jmp.run_jsl 從 Python 中呼叫這些對話方塊和視窗。您可以在 pyDigest.py 範例腳本中使用 JSL 目錄選擇器來取得目錄的路徑。
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 )
);
使用 JMP 的對話框和視窗功能是相容的。我們正在調查外部 UI 問題。
回覆:(自訂)在 JMP 中執行的 Python GUIRunProgram 凍結 JMP,因為沒有 ReadFunction,它會在返回之前收集所有輸出。它也可以與在 JMP 空閒時或在等待(0)期間呼叫的 ReadFunction 一起使用,這樣只要有空閒時間,JMP 就可以執行其他工作。 使用 FFmpeg 在 JMP 中製作影片有一個簡單的 ReadFunction 的範例,它從外部程式讀取並將讀取的內容寫入 JMP 日誌。