2014-04-24 109 views
0

我試圖創建一個相當於一個程序之間的交互如下:鍵盤迴調和鼠標回調

1,按空格

2 - 「禁用」的KeyPressFcn功能

3播放聲音

4-使鼠標操作

5-聲音將被播放

6- 「使能」 再KeyPressFcn功能

7回1

function figure1_KeyPressFcn(hObject, eventdata, handles) 
    switch eventdata.Key 
     case 'space' 
      set(hObject, 'KeyPressFcn', [])      
      soundsc(y,Fs);    
     otherwise 
      disp('error'); 

    end 
end 


function pushbutton1_Callback(hObject, eventdata, handles) 
    soundsc(y,Fs); 
    set(hObject, 'KeyPressFcn', {@figure1_KeyPressFcn, handles}) 
    guidata(hObject, handles); 
end 

步驟6不起作用,所以問題是,如何從一個mousecallback設置hObject爲KeyPressFcn?

回答

1

所以,一些背景它的順序。 hObject不是您設置的屬性。它實際上是調用被使用的函數的對象的句柄。所以,當你在inpushbutton1_Callback中使用它時,你實際上是爲按鈕1設置KeyPressFunction!這就是爲什麼它只能運行一次。相反,試試這個:

set(handles.figure1, 'KeyPressFcn', {@figure1_KeyPressFcn, handles})