在python和pyGTK中处理后激活和禁用按钮

时间:2012-10-18 11:44:19

标签: python pygtk popen

基本上,我首先尝试将按钮设置为“活动”,运行一个进程,然后在该进程运行完毕后再次禁用该按钮。

使用pyGTK和Python,有问题的代码看起来像这样......

self.MEDIA_PLAYER_STOP_BUTTON.set_sensitive(True) #Set button to be "active"
playProcess = Popen("aplay " + str(pathToWAV) + " >/dev/null 2>&1",shell=True) #Run Process
playProcess.wait() #Wait for process to complete    
self.MEDIA_PLAYER_STOP_BUTTON.set_sensitive(False) #After process is complete, disable the button again

然而,这根本不起作用。

非常感谢任何帮助。

1 个答案:

答案 0 :(得分:1)

一切正常(python 2.7.3)。但是如果你在gui线程中调用playProcess.wait() - 你冻结gui线程而不重绘(抱歉,我的英文不是很好)。你确定你尝试使用subprocess.popen()吗?也许os.popen()?

我的小测试:

#!/usr/bin/env python
# -*- coding: utf-8 -*-

import pygtk, gtk, gtk.glade
import subprocess

def aplay_func(btn):
        btn.set_sensitive(True)
        print "init"
        playProcess = subprocess.Popen("aplay tara.wav>/dev/null 2>&1", shell=True)
        print "aaa"
        playProcess.wait()
        print "bbb"
        btn.set_sensitive(False)

wTree = gtk.glade.XML("localize.glade")
window = wTree.get_widget("window1")
btn1 = wTree.get_widget("button1")
window.connect("delete_event", lambda wid, we: gtk.main_quit())
btn1.connect("clicked", aplay_func)
window.show_all()
gtk.main()

结果:

init
aaa
bbb

是的,按钮工作正常。听起来也是。