Python 2.7 Tk filedialog调用外部程序

时间:2016-09-30 10:10:16

标签: python tkinter tk

我开始学习如何使用python并需要为实验室项目开发一些应用程序。

我正在尝试创建一个GUI来选择一些我想作为参数传递给另一个程序的文件。 GUI部分似乎有效,但是当我尝试使用Popen方法调用外部脚本时,据称通过GUI捕获的变量没有传递给Popen调用。

我请求你的善意建议来解决这个问题,因为它似乎仍然有点超出我目前的知识,我真的需要使用Tk / GUI作为这个项目的接口。

这是我的代码:

def button_fasta_callback():
    fasta = tkFileDialog.askopenfile(parent=root,mode='rb',title='Choose a FASTA')
    if fasta != None:
        data_fasta = fasta.read()
        fasta.close()


def button_lista_callback():
    lista = tkFileDialog.askopenfile(parent=root,mode='rb',title='Choose a list')
    if lista !=None:
        data_lista = lista.read()
        lista.close()

#####Create the buttons#######    
root = Tk()
root.title("Sequence extractor")

button_fasta = Button(root,
                       text="Choose FASTA",
                       command=button_fasta_callback)
button_fasta.pack(padx=150, pady=50)


button_lista = Button(root,
                       text="Choose a list",
                       command=button_lista_callback)
button_lista.pack(padx=150, pady=50)

entry = Entry(root, width=50)

root.mainloop()

caller = Popen(['C:\\Python_programs\\Seq_extractor.py', '-l', lista, '-f', fasta])

谢谢大家!

1 个答案:

答案 0 :(得分:1)

您的fastalista变量是button_*函数的本地变量,在您尝试调用Popen的位置时不可见。快速解决方法是使用global将这些视图作为全局变量显示。更好的解决方法是重构此用法使用类并分配self.fastaself.lista,使这些成为类实例的成员变量。