我为一个应用程序制作了一个简单的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之前显示窗口? 谢谢你的帮助!
答案 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脚本。