如何从 tkinter 中启动外部应用程序并打开应用程序文件?

时间:2021-02-06 17:05:42

标签: python tkinter subprocess

我在运行 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. 从我在别处读到的内容来看,我认为使用子进程是打开应用程序的首选方式?

  2. 假设 (1) 的答案是正确的,那么我需要有关如何解决此问题的帮助。我已经通读了子流程文档,但我很难理解它。我上面想做的是替换

    os.system("打开/Applications/Mathematica.app")

使用适当的子流程语法,其中还包括打开指定 Mathematica 文件的参数,例如样本.nb.

  1. 在退出函数中,我还想添加一行将关闭 Mathematica。

0 个答案:

没有答案