2012-11-08 25 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腳本。