6

Glade PyGTK 2.0 を使用して作成された GUI でオーディオ再生の停止ボタンを有効または無効にしようとしています。

プログラムは基本的に、外部プロセスを実行してオーディオを再生することで機能します。

マルチプロセッシングを使用しています (スレッドが遅すぎるため)、停止ボタンを無効にすることができません。これは、gtk ウィジェット スレッドが共有するメモリにプロセスがアクセスできないことが原因であることを理解しています。

私は何か間違ったことをしていますか、またはプロセスが終了したらボタンを有効にする方法はありますか?

#!/usr/bin/python
import pygtk
import multiprocessing
import gobject
from subprocess import Popen, PIPE
pygtk.require("2.0")
import gtk
import threading

gtk.threads_init()

class Foo:
    def __init__(self): 
        #Load Glade file and initialize stuff

    def FooBar(self,widget):
        self.stopButton.set_sensitive(True)#make the Stop button visible in the user section
        def startProgram():
            #run program
            gtk.threads_enter()
            try:
                self.stopButton.set_sensitive(False) 
            finally:
                gtk.threads_leave()
            print "Should be done now"

        thread = multiprocessing.Process(target=startProgram)
        thread.start()

if __name__ == "__main__":
prog = Foo()
gtk.threads_enter()
gtk.main()
gtk.threads_leave()

編集:気にしないでください、私はそれを理解しました。スレッドを適切に実装していなかったため、遅延が発生しました。今はうまくいきます。FooBar メソッドを次のように変更するだけです。

    def FooBar(self,widget):
        self.stopButton.set_sensitive(True)#make the Stop button visible in the user section
        def startProgram():
            #run program
            Popen.wait() #wait until process has terminated
            gtk.threads_enter()
            try:
                self.stopButton.set_sensitive(False) 
            finally:
                gtk.threads_leave()
            print "Should be done now"

        thread = threading.Thread(target=startProgram)
        thread.start()
4

0 に答える 0