2016-07-15 17 views
0

私はmain()という関数を持っています。この「メイン」では別の関数A()を呼び出します。 私はGUIdeを持っており、この中に変数 'number'があります。 A()から 'number'にアクセスする方法とA()から 'number'の値を変更する方法はありますか?別のmファイルからMATLAB GUI関数にアクセスする方法 - matlab

1-次のコードは機能しません。

main(handles) 
    %some code 
    A(handles); 

    function A(handles) 
    set(handles.number,0); 
    end 
end 

2-とこれも機能しません。

main(handles) 
    %some code 
    A(handles); 

    function A(handles) 
    handles.setNumberFnc(5); 
    end 
end 


%%%%%in GUI i have this function. 

function setNumberFnc(n) 
    handles.number = n; 
    guidata(hObject, handles); 

この機能には 'hObject'がありません。私は何をすべきか分かりません。

3- GUIとA()で 'グローバル番号'を使用できますか?

+0

私は、デバッガを使用することをお勧め - 歩一歩進んで、 'handles'と' hObject'の値を見ると... – Rotem

+0

あなたは私たち示しできますあなたの変数 'handles'を定義する行? –

答えて

0

の方法で、あなたのmain.mファイルに入れなければならないでしょう。 すべての必要な機能でグローバル変数 '番号'を定義する必要がありました。今すぐ簡単に私はGUIまたはA()関数で '数値'の値を変更することができます。 '設定'する必要はありません。

main() 
    %some code 
    A(); 

    function A() 
    global number; 
    disp(number); 
    number = 5; 
    end 
end 

とガイド:

function B_Callback(hObject, ~, handles) 
global number; 
number = 2; 
guidata(hObject, handles); 
0

私が通常やっている問題を解決しています。私の場合、GUIが主な目的であり、私はボタンのコールバックなどを定義して外部のスクリプトや関数を呼び出すことができます。

別のスクリプトや関数を実行して、GUIを変更したいとします。これも大丈夫です!必要なのは、GUIのハンドルです。たとえば、gcf(GUIが現在アクティブなFigureウィンドウであることを前提とします)を使用して取得できます。ただし、setNumberFcnlocal function(またはおそらくはnested functionですが、これはほぼ同じものです)、別のスクリプトや関数ファイルから呼び出すことはできません。代わりに、私は私の問題を解決してきました

function main() 

    fig_handle = gcf; 
    numfield_handle = findobj(gcf, 'NumFieldTagThatYouDefinedInGUIDE'); 

    function setNumberFcn(numfield_handle, number) 
     set(numfield_handle, 'String', num2str(number)) 
    end 

end 
関連する問題