PyGTK多处理和更新GUI

时间:2012-10-17 12:07:26

标签: python multithreading gtk pygtk multiprocessing

我正在尝试在使用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()

0 个答案:

没有答案