我在运行 OS 10.15.4 的 Mac 上使用 Python 3.7。在执行各种操作的 tkinter 窗口中,我想启动一个外部应用程序。
为了使示例保持相对简单,下面的代码将创建一个简单的窗口,用户可以在其中输入所需时间序列的长度。创建了系列图,并且还有一个选项可以启动 Mathematica。
import os
import numpy as np
import matplotlib.pyplot as plt
from tkinter import Tk, Button,Entry,Label,TOP
window=Tk()
window.title("Plot Series")
window.geometry('500x500')
#Specify series length
length_label=Label(window, text="Time Series Length",bg='lightgray')
length_label.pack(side=TOP)
length = Entry(window,width=10)
length.pack(side=TOP)
#Create and plot random time series of specified length
def _plot():
np.random.seed(123)
num_times=int(length.get())
t=np.array(range(num_times))
x = np.random.randn(num_times,1)
plt.plot(t,x,'-')
plt.show(block=False)
#Plot button
plot_button = Button(master=window, text="Plot", command=_plot)
plot_button.pack(side=TOP)
#Function to open Mathematica
def _openMath():
os.system("open /Applications/Mathematica.app")
#Open Mathematica button
read_button = Button(master=window, text="Mathematica", command=_openMath)
read_button.pack(side=TOP)
#Define quit and create quit button
def _quit():
plt.close()
window.quit()
window.destroy()
quit_button = Button(master=window, text="Quit", command=_quit)
quit_button.pack(side=TOP)
window.mainloop()
到目前为止工作正常,但存在一些问题:
从我在别处读到的内容来看,我认为使用子进程是打开应用程序的首选方式?
假设 (1) 的答案是正确的,那么我需要有关如何解决此问题的帮助。我已经通读了子流程文档,但我很难理解它。我上面想做的是替换
os.system("打开/Applications/Mathematica.app")
使用适当的子流程语法,其中还包括打开指定 Mathematica 文件的参数,例如样本.nb.