2

入力として 1 つの変数を受け取り、別の変数を生成するいくつかの操作を実行する GUI をプログラムしようとしています。GUI には、GUI を閉じるプッシュボタンが 1 つあります。

私は GUIDE を使用していません (そして使用したくありません)。

以下に、入力変数に 1 を追加するだけの GUI の最小限の作業例を示します。「完了」プッシュ ボタンで GUI を閉じますが、変数をワークスペースにエクスポートする方法が見つかりません

% Is this the correct way to initialize the function for what I am trying to do?
function outputVariable = exampleGUI(inputVariable) 

    % Initialize main figure
    hdl.mainfig = figure();

    % Add Button
    hdl.addPushButton = uicontrol(hdl.mainfig, 'Units', 'normalized',
                                  'Position', [0.05 0.6 0.3 0.25], 'String',
                                  'Add One', 'Callback', @addOne);
    % Done Button
    hdl.donePushButton = uicontrol(hdl.mainfig, 'Units', 'normalized',
                                   'Position', [0.65 0.6 0.3 0.25], 'String',
                                   'Done', 'Callback', @done);
    % Static text
    hdl.sliceNoText = uicontrol(hdl.mainfig, 'Style', 'text',
                                'Fontsize', 16, 'Units', 'normalized', 
                                'Position', [0.35 0.2 0.3 0.25]);

    function addOne(~, ~, ~)
        inputVariable = inputVariable + 1; % add one to the current inputVariable
        set(hdl.sliceNoText, 'String', num2str(inputVariable)); % change static text
        newVariable = inputVariable; % new variable to be exported
    end

    function done(~, ~, ~)   
        delete(hdl.mainfig); % close GUI
    end

end

私は次のようなことをしたいと思います:

ワークスペースで:

outputVariable = exampleGUI(inputVariable)

入力変数に一定回数追加した後、「完了」ボタンを押して GUI を閉じ、ワークスペースに inputVariable と outputVariable の両方が含まれるようにします。

どうもありがとう。

フネリー

4

1 に答える 1

2

これはあなたができることの一例です。必要な機能でこれを機能させるためにできることはたくさんあります。通常、入力と出力、および guihandles 以外に、関数のワークスペース全体に変数を配置するのは好きではありません。と を使用setappdatagetappdataて他の変数を保存し、それらをコールバックにアクセスできるようにします。これはあなた次第ですが、以下は単純な GUI を機能させる方法の例です。を使用CloseRequestFcnすると、ユーザーが GUI を閉じた場合に何が起こるかを処理できます。お役に立てれば。さらにwaitfor、関数が閉じられるまで関数が戻るのを防ぎます。必要に応じて、Figure の'WindowStyle'プロパティをに設定し'modal'て、ユーザーが GUI を閉じる前に入力を強制することもできます。

function outputVariable = exampleGUI(inputVariable) 

    % Any variables declared here will be accessible to the callbacks
    % Initialize output
    outputVariable = [];

    % Initialize newVariable
    newVariable = [];

    % Initialize main figure
    hdl.mainfig = figure('CloseRequestFcn',@closefunction);

    % Add Button
    hdl.addPushButton = uicontrol(hdl.mainfig, 'Units', 'normalized', 'Position',[0.05 0.6 0.3 0.25], 'String', 'Add One', 'Callback', @addOne);
    % Done Button
    hdl.donePushButton = uicontrol(hdl.mainfig, 'Units', 'normalized', 'Position',[0.65 0.6 0.3 0.25], 'String', 'Done', 'Callback', @done);
    % Static text
    hdl.sliceNoText = uicontrol(hdl.mainfig,'Style','text','Fontsize',16,'Units','normalized','Position',[0.35 0.2 0.3 0.25]);


    function addOne(hObject,eventdata) 
        inputVariable = inputVariable+1; % add one to the current inputVariable
        set(hdl.sliceNoText, 'String', num2str(inputVariable)); % change static text
        newVariable = inputVariable; % new variable to be exported
    end

    function closefunction(hObject,eventdata) 
        % This callback is executed if the user closes the gui
        % Assign Output
        outputVariable = newVariable;
        % Close figure
        delete(hdl.mainfig); % close GUI
    end

    function done(hObject,eventdata)  
        % Assign Output
        outputVariable = newVariable;
        % Close figure
        delete(hdl.mainfig); % close GUI
    end

    % Pause until figure is closed ---------------------------------------%
    waitfor(hdl.mainfig);    
end
于 2013-03-17T20:53:47.193 に答える