2016-09-30 102 views
-1

我开始学习如何使用python,并需要为实验室项目开发一些应用程序。Python 2.7 Tk filedialog调用外部程序

我想创建一个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

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