4

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

4

2 回答 2

1

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

于 2012-11-13T22:54:58.420 回答
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 脚本。

于 2012-11-23T10:29:24.320 回答