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.call() の代わりに subprocess.Popen() を使用する必要があります。サブプロセスを自動的にバックグラウンドに置くため、実行中のウィンドウが表示されます。問題は、.hide() コマンドを削除しないと、ウィンドウがポップアップした直後に消えてしまうことでした。そうしないと、実行が終了したときにウィンドウを非表示にできませんでした。

これを解決するために、runningWindow を新しい (runningWindow.glade および runningWindow.py) ファイルに作成しました。

次に、次のようなラッパー bash スクリプトを作成しました。

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

メインのpythonスクリプトからsubprocess.Popen()でこのbashスクリプトを呼び出しました。

于 2012-11-23T10:29:24.320 に答える