我有一个 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 == None,并看到创建 gnome-terminal 需要一些时间。但是一旦创建了终端,按钮就会变成红色,即使一个进程仍在新终端中运行。我无法创建一个新的 gnome 终端,然后传达我想要运行的进程。似乎 gnome-terminal 只是创建了一个新的 bash 实例,然后返回完成,所以如果我尝试与其标准输入通信,则会出现管道错误。