2012-10-18 6 views
5

Zasadniczo próbuję najpierw zrobić przycisk "aktywny", uruchomić proces, a następnie po zakończeniu tego procesu wyłączyć przycisk ponownie.Aktywacja i dezaktywacja przycisku po procesie w python i pyGTK

Korzystanie pygtk i Python, dany kod wygląda następująco ...

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 

Jednak to nie działa w ogóle.

Każda pomoc zostanie bardzo doceniona.

+2

Czy to nie jest tylko http://stackoverflow.com/questions/12933970/pygtk-multiprocessing-and-updating-gui, który został opublikowany na drugi dzień? – deinonychusaur

Odpowiedz

1

Wszystko działa normalnie (python 2.7.3). Ale jeśli wywołasz metodę playProcess.wait() w wątku gui - zamrażasz wątek GUI bez przerysowywania (przepraszam, mój angielski nie jest zbyt dobry). Czy jesteś pewien, że próbujesz użyć podprocesu.popen()? Może os.popen()?

Moja mała próba:

#!/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() 

Wynik:

init 
aaa 
bbb 

I tak, przycisk działa prawidłowo. Dźwięk też.

Powiązane problemy