2012-10-18 37 views
5

में प्रक्रिया के बाद बटन को सक्रिय और अक्षम करना अनिवार्य रूप से, मैं पहले एक बटन "सक्रिय" बनाने की कोशिश कर रहा हूं, एक प्रक्रिया चलाता हूं, और उसके बाद उस प्रक्रिया को चलाने के बाद, बटन को फिर से अक्षम करें।पायथन और पीजीजीटीके

PyGTK और अजगर का उपयोग करना, प्रश्न में कोड इस तरह दिखता है ...

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 

हालांकि, इस सब पर काम नहीं करता।

किसी भी मदद की सराहना की जाएगी।

+2

क्या यह सिर्फ http://stackoverflow.com/questions/12933970/pygtk-multiprocessing-and-updating-gui है जिसे दूसरे दिन पोस्ट किया गया था? – deinonychusaur

उत्तर

1

सभी सामान्य रूप से काम कर रहे हैं (पायथन 2.7.3)। लेकिन अगर आप gui थ्रेड में playProcess.wait() को कॉल करते हैं - तो आप बिना रीड्रॉइंग के गुई थ्रेड को फ्रीज करते हैं (क्षमा करें, मेरी अंग्रेजी बहुत अच्छी नहीं है)। और क्या आप वाकई 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 

और हाँ, बटन ठीक से काम कर रहा है। ध्वनि भी