0

MATLAB GUIDE を使用して作成した GUI があります。GUI から値を返そうとしています。コードの関連部分は次のとおりです (完全なコードはここにあります)。

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

MATLABニュースグループで同様の質問を見つけましたが、解決策が見つかりませんでした(提案されたように、すべてのguidataのドキュメントを読みました)。

私の問題は、ある GUIDE の関数内の「ハンドル」構造に情報を記録し、別の関数でこの情報を取得できないことです。

ユーザーがウィンドウを閉じるのを待つために、関数内の UIWAIT 呼び出しのコメントを外そうとしました。test_OpeningFcn

% --- 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);

ボタンをクリックした後、ハンドル変数を取得しようとします。しかし、どちらも機能せず、同様のエラー メッセージで失敗します。

どんな助けでも大歓迎です。ご清聴ありがとうございました。

4

4 に答える 4

1

問題は、GUI を次のように呼び出す場合です。

>> [a,b] = test()

この呼び出しはすぐに返されるため、出力関数handles.testでまだ存在しないものにアクセスしようとすると、エラーが発生します。

GUI から値を返す方法を示す Doug Hull によるスクリーンキャストがあります。そのページからコピーした変更のリストを次に示します。

%%% 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
于 2012-08-07T22:52:42.697 に答える
0

初期化コードでは、そのフィールドを宣言する必要があります。

handles.test = [];

したがって、後で呼び出すことができます。

于 2012-08-07T21:14:39.840 に答える
-2
global test
handles.test = 'ok';
于 2013-12-21T16:48:32.013 に答える