我有一个Tk python程序,它在当前目录中创建一个python文件列表,并为它们中的每一个生成一个按钮。当你点击一个按钮时,相应的python程序将通过子进程在新的gnome终端中启动。在子进程在新终端上完成执行后,我想将按钮的颜色切换为红色。不幸的是,该按钮几乎立即改变颜色。在子进程完成后为按钮着色
from Tkinter import *
import os, subprocess
root = Tk()
buttonsD = {}
def launch(ourfile):
p=subprocess.Popen(["gnome-terminal","-e","python " + ourfile], shell=False)
buttonsD[ourfile].configure(bg='red')
dirlist=os.listdir(os.getcwd())
for fname in dirlist:
if fname.endswith('py') and fname != 'gui2.py':
buttonsD[fname] = Button(root,text=fname,command=lambda i=fname: launch(i))
buttonsD[fname].pack(side=TOP,expand=YES,fill=BOTH)
root.mainloop()
几乎就意味着我可以等待p.poll ==无,看到它花费的gnome-terminal要创建的时刻。但是一旦终端被创建,按钮就会变红,即使一个进程仍在新终端中运行。我无法创建一个新的gnome终端,然后传递我想要运行的进程。看起来gnome-terminal只是创建一个bash的新实例,然后返回完成,所以如果我尝试与其stdin进行通信,那么会出现管道错误。