2012-10-18 3 views
5

Im Wesentlichen versuche ich, eine Schaltfläche "aktiv" zuerst, führen Sie einen Prozess, und deaktivieren Sie die Schaltfläche erneut, nachdem dieser Prozess beendet ist.Aktivieren und Deaktivieren der Schaltfläche nach dem Prozess in Python und pyGTK

Mit pyGTK und Python sieht der Code in Frage wie diese ...

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 

Dies ist jedoch nicht bei allen.

Jede Hilfe würde sehr geschätzt werden.

+2

Ist das nicht nur http://stackoverflow.com/questions/12933970/pygtk-multiprocessing-and-updating-gui das wurde neulich gepostet? – deinonychusaur

Antwort

1

Alles funktioniert normal (Python 2.7.3). Aber wenn du playProcess.wait() in gui thread aufruft - frierst du gui thread ein, ohne es neu zu zeichnen (sorry, mein Englisch ist nicht sehr gut). Und sind Sie sicher, dass Sie versuchen, subprocess.popen() zu verwenden? Vielleicht os.popen()?

Mein kleiner 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() 

Ergebnis:

init 
aaa 
bbb 

Und ja, Taste richtig funktioniert. Klang auch.

Verwandte Themen