我开始学习如何使用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])
谢谢大家!
答案 0 :(得分:1)
您的fasta
和lista
变量是button_*
函数的本地变量,在您尝试调用Popen
的位置时不可见。快速解决方法是使用global
将这些视图作为全局变量显示。更好的解决方法是重构此用法使用类并分配self.fasta
和self.lista
,使这些成为类实例的成员变量。