2012-11-08 27 views
4

我做了一个简单的PyGTK - Glade GUI的应用程序。我做了按钮,on_button_click调用了一个bash脚本。 我想在bash脚本运行时显示一个弹出窗口,并在完成后隐藏它。我在Glade中创建了一个名为runningWindow的窗口,并编写了以下代码:python弹出窗口,而bash脚本运行

def on_button1_clicked(self,widget): 
    self.glade.get_object("runningWindow").show() 
    os.system('bash run.sh') 
    self.glade.get_object("runningWindow").hide() 

此代码在run.sh运行时不显示任何内容。如果我删除hide()行,窗口将正确显示,但仅在run.sh过程完成后。

启动GUI中的初始化功能:

def __init__(self): 
     self.gladefile = "MyFile.glade" 
     self.glade = gtk.Builder() 
     self.glade.add_from_file(self.gladefile) 
     self.glade.connect_signals(self) 
     self.glade.get_object("MainWindow").show_all() 

我怎么可以显示使用os.system前的窗口被称为? 谢谢你的帮助!

回答

1

您可能想要查看子进程模块,并在后台任务中运行子进程。

0

我无法解决问题,但我可以解决它。也许别人觉得它有用:

首先,应该使用subprocess.Popen()而不是subprocess.call()。它将子进程自动置于后台,因此显示正在运行的窗口。问题是,如果我没有删除.hide()命令,弹出窗口后立即消失。否则,当运行结束时,我无法隐藏窗口。

为了解决这个问题,我在一个新的(runningWindow.glade和runningWindow.py)文件中创建了runningWindow。

然后我创建了一个包装bash脚本,说:

python runningWindow.py & 
pid=$! 
bash run.sh 
kill pid 

并从主python脚本调用subprocess.Popen()这个bash脚本。