当bash脚本运行时,python弹出窗口

时间:2012-11-08 11:23:03

标签: python user-interface glade

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

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的 init 功能:

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之前显示窗口? 谢谢你的帮助!

2 个答案:

答案 0 :(得分:1)

您可能希望查看子流程模块,并在后台任务中运行子流程。

答案 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脚本。