2012-08-07 58 views
0

我有一個使用MATLAB GUIDE創建的GUI。我試圖從GUI中返回一個值。下面是代碼的相關部分(完整的代碼可以發現​​):GUIDE中的句柄不更新

function varargout = test(varargin) 

% --- Outputs from this function are returned to the command line. 
function varargout = test_OutputFcn(hObject, eventdata, handles) 

    % Get default command line output from handles structure 
    varargout{1} = handles.output; 
    varargout{2} = handles.test; 


% --- Executes on button press in pushbutton1. 
function pushbutton1_Callback(hObject, eventdata, handles) 

    handles.test = 'ok'; 

    % Update handles structure 
    guidata(hObject, handles); 

而且我只要一執行GUI時,我收到此錯誤信息:

http://s11.postimage.org/5trvp5c83/Captura_de_tela_2012_08_06_a_s_12_25_55.png

我發現一個similar關於MATLAB新聞組的問題,但我沒有找到解決方案(我讀了所有guidata的文檔,就像建議的那樣)。

我的問題是,我在一個GUIDE的函數內的「句柄」結構中記錄了一個信息,我無法在另一個函數中檢索到這個信息。

I tried取消註釋test_OpeningFcn函數中的UIWAIT調用,試圖等待用戶關閉窗口。

% --- Executes just before test is made visible. 
function test_OpeningFcn(hObject, eventdata, handles, varargin) 

    % Choose default command line output for test 
    handles.output = hObject; 

    % Update handles structure 
    guidata(hObject, handles); 

    % UIWAIT makes test wait for user response (see UIRESUME) 
    uiwait(handles.figure1); 

當我點擊按鈕,然後嘗試採取句柄變量。但它也不起作用,並且fails也有類似的錯誤信息。

任何幫助將受到歡迎。 感謝您的關注。

回答

0

在初始化代碼中,您必須聲明該字段。

handles.test = []; 

所以你可以稍後調用它。

+0

感謝您的關注,但它沒有奏效,@copiancestral :( – jhonatanoliveira 2012-08-08 01:24:03

1

的問題是,當你調用GUI爲:立即

>> [a,b] = test() 

此調用返回,所以在輸出功能,您嘗試訪問handles.test不存在,只是還沒有,導致錯誤。

Doug Hull有一個screencast顯示如何從GUI返回一個值。這是爲了使從該網頁複製的更改列表:

%%% OpenignFCN 
uncomment uiwait 

%%%OutputFCN 
varargout{1} = handles.output; 
% The figure can be deleted now 
delete(handles.figure1); 


%%%CloseReqFCN 
if isequal(get(hObject, 'waitstatus'), 'waiting') 
    % The GUI is still in UIWAIT, us UIRESUME 
    uiresume(hObject); 
else 
    % The GUI is no longer waiting, just close it 
    delete(hObject); 
end 
+0

感謝,@Amro,你的關注。這是一個很好的視頻,但它沒有回答我的問題。 就像我說的,我試圖更新 句柄 變量在視頻中,Doug Hull教導瞭如何取出一個實習生的GUI變量,但我想拿出自己的變量,你是否明白了?我的意思是,我想添加變量 處理 結構,並從我的GUI中取出。 – jhonatanoliveira 2012-08-08 03:38:04

+1

@jhow:對於遲到的回覆感到抱歉;這個想法是一樣的,你在開始函數中初始化你自己的變量(將它存儲在'handles'結構中),你可以在按鈕回調函數中修改它,最後在輸出函數中返回它的值(uiwait'調用導致執行阻塞,直到數字被刪除)。請記住,每次修改'handles'結構時都必須調用GUIDATA .. – Amro 2012-08-11 11:43:24

-2
global test 
handles.test = 'ok'; 
0

您需要在

handles = guidata(gcf); 

添加更新不同的功能句柄。 希望我正確。