2012-10-18 15 views
5

In sostanza, sto tentando di rendere un pulsante "attivo" per primo, di eseguire un processo, e dopo che il processo è terminato, disattiva nuovamente il pulsante.Attivazione e disattivazione del pulsante dopo processo in python e pyGTK

Utilizzando pyGTK e Python, il codice in questione si presenta come questo ...

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 

Tuttavia, questo non funziona affatto.

Qualsiasi aiuto sarebbe molto apprezzato.

+2

Non è solo http://stackoverflow.com/questions/12933970/pygtk-multiprocessing-and-updating-gui che è stato pubblicato l'altro giorno? – deinonychusaur

risposta

1

Tutto funziona normalmente (python 2.7.3). Ma se chiami playProcess.wait() nel thread del gui - si blocca il thread del gui senza ridisegnare (scusa, il mio inglese non va molto bene). E sei sicuro di provare a utilizzare subprocess.popen()? Forse os.popen()?

mio piccolo test:

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

Risultato:

init 
aaa 
bbb 

E sì, tasto sta funzionando correttamente. Anche il suono.

Problemi correlati