您好我正在使用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,但是我收到一条错误消息,指出文件没有按预期存在。
为什么传递目录中存在的程序会导致程序无法运行,而不会传递错误消息?
非常感谢
答案 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()