2012-10-18 28 views
5

Về cơ bản, tôi đang cố gắng thực hiện nút "hoạt động" trước, chạy một quy trình và sau đó quá trình đó đã kết thúc chạy, hãy tắt lại nút.Kích hoạt và vô hiệu hóa nút sau khi xử lý trong python và pyGTK

Sử dụng PyGTK và Python, mã trong câu hỏi trông như thế này ...

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 

Tuy nhiên, điều này không làm việc ở tất cả.

Mọi trợ giúp sẽ được đánh giá cao.

+2

Đây không phải là http://stackoverflow.com/questions/12933970/pygtk-multiprocessing-and-updating-gui đã được đăng vào một ngày khác? – deinonychusaur

Trả lời

1

Tất cả đều hoạt động bình thường (trăn 2.7.3). Nhưng nếu bạn gọi playProcess.wait() trong thread gui - bạn đóng băng gui thread mà không vẽ lại (xin lỗi, tiếng anh của tôi không tốt lắm). Và bạn có chắc chắn rằng bạn cố gắng sử dụng subprocess.popen()? Có lẽ os.popen()?

thử nghiệm nhỏ của tôi:

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

Kết quả:

init 
aaa 
bbb 

Và vâng, nút đang làm việc một cách chính xác. Âm thanh quá.

Các vấn đề liên quan