Tkinter程序没有加载

时间:2014-07-10 14:55:50

标签: python tkinter subprocess

您好我正在使用python Tkinter编写基本GUI。我可以让它显示界面,但是当我要求我的一个按钮调用子进程时,GUI不会加载,尽管没有报告错误。这是按钮的代码:

B = Tkinter.Button(root, text ="Reference fasta file", command = openfile).pack()
C = Tkinter.Button(root, text ="SNP file", command = openfile).pack()
D = Tkinter.Button(root, text ="Generate variant fasta(s)", command = subprocess.call(['./myprogram.sh','B','C'],shell=True)).pack()

如果我不包含按钮" D"在我的代码中,出现了GUI。奇怪的是,如果我包括按钮" D"并且将一个不存在的文件传递给subprocess.call,会出现GUI,但是我收到一条错误消息,指出文件没有按预期存在。

为什么传递目录中存在的程序会导致程序无法运行,而不会传递错误消息?

非常感谢

2 个答案:

答案 0 :(得分:1)

使用

command = subprocess.call(['./myprogram.sh','B','C'],shell=True)

您运行subprocess并将结果分配给command=

command=只期望没有()的函数名和参数(如ambi所说:python callable元素)

可能subprocess正在运行,脚本无法运行其余代码。

也许你需要

def myprogram()
    subprocess.call(['./myprogram.sh','B','C'],shell=True)

command = myprogram

你真的需要子进程吗?

答案 1 :(得分:1)

您作为命令传递的不是函数,而是函数返回的函数(当然可能是函数)。 所以而不是:

D = Tkinter.Button(root, text ="Generate variant fasta(s)", command = subprocess.call(['./myprogram.sh','B','C'],shell=True)).pack()

你应该这样称呼:

def click_callback():
    subprocess.call(['./myprogram.sh','B','C'],shell=True)

D = Tkinter.Button(root, text ="Generate variant fasta(s)", command = click_callback).pack()