Matlab figure传入数据到figure(二)

Matlab figure传入数据到figure(二)

上一篇文章中讲解了传递数据到figure的几种方式,现在补充一种方式:利用varargout将figure的OutPut_Fcn(hObject, eventdata, handles)的返回值返回给某个figure,从而实现figure传入数据到另一个figure。

1、varargout

类似于varargin,varargout表示可变长度的返回参数列表。假设定义以下返回矩阵x行数和列数的函数:

       function [s,varargout] = mysize(x)
       nout = max(nargout,1)-1;
       s = size(x);
       for i=1:nout, varargout(i) = {s(i)}; end
当调用[s,rows,cols] = mysize(rand(4,5))时,s = [4,5],varargout{1} = rows = 4,varargout{2} = cols = 5。

2、figure的OutPut_Fcn函数

假设当前的fiugre为Result.fig。该函数主要用于返回你用命令或者函数形式调用该figure时的返回值。该值在默认的情况下,一般会返回figure的句柄,然后外部程序就可以通过该句柄获取figure上各个控件的值等信息。

% --- Outputs from this function are returned to the command line.
function varargout = Result_OutputFcn(hObject, eventdata, handles) 
% varargout  cell array for returning output args (see VARARGOUT);
% hObject    handle to figure
% eventdata  reserved - to be defined in a future version of MATLAB
% handles    structure with handles and user data (see GUIDATA)

% Get default command line output from handles structure

varargout{1} = handles.output;%默认状态下返回该figure的句柄

该函数一般在以下三种情况下调用(当前figure为Result,其Tag也为Result):

  • h = Result();直接调用figure返回其对应的句柄时
  • uiresume(handles.Result);与uiwait(handles.Result)对应,当重新绘制figure时
  • close(handles.Result);关闭该figure时

3、利用varargout传递数据

如前面第1节所述,varargout能够保存变长的返回参数列表,因此如果需要返回多个参数时,在对应figure下的OutPut_Fcn函数下写入:

varargout{1} = ***;varargout{2} = ***;varargout{3} = ***。注意:这里可以传递的数据可以自己按需编程序。

为了说明具体使用方法,本文对上一篇文章中的例子稍作修改:StrCat.fig输入两个字符串,然后将这两个字符串传递给Result.fig,然后Result.fig对这两字符串进行拼接处理后,先显示在Result.fig自己的面板上,然后再通过单击[回传数据]将拼接后的字符串利用本篇文章所述的方法返回给StrCat.fig。



为了能够更加清晰地演示 回传 的效果,在Result.fig的OpeningFcn函数中添加代码:uiwait(handles.Result);%让Result.fig先显示并且执行相应的操作后再调用OutPut_Fcn函数返回合并后的字符串。并在[回传数据]按钮单击的callback函数中添加uiresume(handles.Result);%让Result.fig继续显示并调用OutPut_Fcn返回对应的拼接后的字符串。

 Result.m代码如下:

function varargout = Result(varargin)
% RESULT MATLAB code for Result.fig
%      RESULT, by itself, creates a new RESULT or raises the existing
%      singleton*.
%
%      H = RESULT returns the handle to a new RESULT or the handle to
%      the existing singleton*.
%
%      RESULT('CALLBACK',hObject,eventData,handles,...) calls the local
%      function named CALLBACK in RESULT.M with the given input arguments.
%
%      RESULT('Property','Value',...) creates a new RESULT or raises the
%      existing singleton*.  Starting from the left, property value pairs are
%      applied to the GUI before Result_OpeningFcn gets called.  An
%      unrecognized property name or invalid value makes property application
%      stop.  All inputs are passed to Result_OpeningFcn via varargin.
%
%      *See GUI Options on GUIDE's Tools menu.  Choose "GUI allows only one
%      instance to run (singleton)".
%
% See also: GUIDE, GUIDATA, GUIHANDLES

% Edit the above text to modify the response to help Result

% Last Modified by GUIDE v2.5 12-Jun-2017 21:28:29

% Begin initialization code - DO NOT EDIT
gui_Singleton = 1;
gui_State = struct('gui_Name',       mfilename, ...
                   'gui_Singleton',  gui_Singleton, ...
                   'gui_OpeningFcn', @Result_OpeningFcn, ...
                   'gui_OutputFcn',  @Result_OutputFcn, ...
                   'gui_LayoutFcn',  [] , ...
                   'gui_Callback',   []);
if nargin && ischar(varargin{1})
    gui_State.gui_Callback = str2func(varargin{1});
end

if nargout
    [varargout{1:nargout}] = gui_mainfcn(gui_State, varargin{:});
else
    gui_mainfcn(gui_State, varargin{:});
end
% End initialization code - DO NOT EDIT


% --- Executes just before Result is made visible.
function Result_OpeningFcn(hObject, eventdata, handles, varargin)
% This function has no output args, see OutputFcn.
% hObject    handle to figure
% eventdata  reserved - to be defined in a future version of MATLAB
% handles    structure with handles and user data (see GUIDATA)
% varargin   command line arguments to Result (see VARARGIN)

% Choose default command line output for Result
handles.output = hObject;
handles.varargin = varargin;%将输入的信息保存到当前figure的handles句柄中
% Update handles structure
guidata(hObject, handles);

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


% --- Outputs from this function are returned to the command line.
function varargout = Result_OutputFcn(hObject, eventdata, handles) 
% varargout  cell array for returning output args (see VARARGOUT);
% hObject    handle to figure
% eventdata  reserved - to be defined in a future version of MATLAB
% handles    structure with handles and user data (see GUIDATA)

% Get default command line output from handles structure

varargout{1} = handles.output;



function edit1_Callback(hObject, eventdata, handles)
% hObject    handle to edit1 (see GCBO)
% eventdata  reserved - to be defined in a future version of MATLAB
% handles    structure with handles and user data (see GUIDATA)

% Hints: get(hObject,'String') returns contents of edit1 as text
%        str2double(get(hObject,'String')) returns contents of edit1 as a double


% --- Executes during object creation, after setting all properties.
function edit1_CreateFcn(hObject, eventdata, handles)
% hObject    handle to edit1 (see GCBO)
% eventdata  reserved - to be defined in a future version of MATLAB
% handles    empty - handles not created until after all CreateFcns called

% Hint: edit controls usually have a white background on Windows.
%       See ISPC and COMPUTER.
if ispc && isequal(get(hObject,'BackgroundColor'), get(0,'defaultUicontrolBackgroundColor'))
    set(hObject,'BackgroundColor','white');
end

% --- Executes on button press in pushbutton2.
function pushbutton2_Callback(hObject, eventdata, handles)
% hObject    handle to pushbutton2 (see GCBO)
% eventdata  reserved - to be defined in a future version of MATLAB
% handles    structure with handles and user data (see GUIDATA)

h = handles.varargin{1,1};
handles.resultStr = strcat('welcome,', h.str1, h.str2);
guidata(hObject, handles);

set(handles.edit1, 'String', handles.resultStr);

% --- Executes on button press in pushbutton3.
function pushbutton3_Callback(hObject, eventdata, handles)
% hObject    handle to pushbutton3 (see GCBO)
% eventdata  reserved - to be defined in a future version of MATLAB
% handles    structure with handles and user data (see GUIDATA)
handles.output = handles.resultStr;
guidata(hObject, handles);
uiresume(handles.Result);
StrCat.m的代码如下:

function varargout = StrCat(varargin)
% STRCAT MATLAB code for StrCat.fig
%      STRCAT, by itself, creates a new STRCAT or raises the existing
%      singleton*.
%
%      H = STRCAT returns the handle to a new STRCAT or the handle to
%      the existing singleton*.
%
%      STRCAT('CALLBACK',hObject,eventData,handles,...) calls the local
%      function named CALLBACK in STRCAT.M with the given input arguments.
%
%      STRCAT('Property','Value',...) creates a new STRCAT or raises the
%      existing singleton*.  Starting from the left, property value pairs are
%      applied to the GUI before StrCat_OpeningFcn gets called.  An
%      unrecognized property name or invalid value makes property application
%      stop.  All inputs are passed to StrCat_OpeningFcn via varargin.
%
%      *See GUI Options on GUIDE's Tools menu.  Choose "GUI allows only one
%      instance to run (singleton)".
%
% See also: GUIDE, GUIDATA, GUIHANDLES

% Edit the above text to modify the response to help StrCat

% Last Modified by GUIDE v2.5 12-Jun-2017 15:43:33

% Begin initialization code - DO NOT EDIT
gui_Singleton = 1;
gui_State = struct('gui_Name',       mfilename, ...
                   'gui_Singleton',  gui_Singleton, ...
                   'gui_OpeningFcn', @StrCat_OpeningFcn, ...
                   'gui_OutputFcn',  @StrCat_OutputFcn, ...
                   'gui_LayoutFcn',  [] , ...
                   'gui_Callback',   []);
if nargin && ischar(varargin{1})
    gui_State.gui_Callback = str2func(varargin{1});
end

if nargout
    [varargout{1:nargout}] = gui_mainfcn(gui_State, varargin{:});
else
    gui_mainfcn(gui_State, varargin{:});
end
% End initialization code - DO NOT EDIT


% --- Executes just before StrCat is made visible.
function StrCat_OpeningFcn(hObject, eventdata, handles, varargin)
% This function has no output args, see OutputFcn.
% hObject    handle to figure
% eventdata  reserved - to be defined in a future version of MATLAB
% handles    structure with handles and user data (see GUIDATA)
% varargin   command line arguments to StrCat (see VARARGIN)

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

% Update handles structure
guidata(hObject, handles);

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


% --- Outputs from this function are returned to the command line.
function varargout = StrCat_OutputFcn(hObject, eventdata, handles) 
% varargout  cell array for returning output args (see VARARGOUT);
% hObject    handle to figure
% eventdata  reserved - to be defined in a future version of MATLAB
% handles    structure with handles and user data (see GUIDATA)

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



function edit1_Callback(hObject, eventdata, handles)
% hObject    handle to edit1 (see GCBO)
% eventdata  reserved - to be defined in a future version of MATLAB
% handles    structure with handles and user data (see GUIDATA)

% Hints: get(hObject,'String') returns contents of edit1 as text
%        str2double(get(hObject,'String')) returns contents of edit1 as a double


% --- Executes during object creation, after setting all properties.
function edit1_CreateFcn(hObject, eventdata, handles)
% hObject    handle to edit1 (see GCBO)
% eventdata  reserved - to be defined in a future version of MATLAB
% handles    empty - handles not created until after all CreateFcns called

% Hint: edit controls usually have a white background on Windows.
%       See ISPC and COMPUTER.
if ispc && isequal(get(hObject,'BackgroundColor'), get(0,'defaultUicontrolBackgroundColor'))
    set(hObject,'BackgroundColor','white');
end



function edit2_Callback(hObject, eventdata, handles)
% hObject    handle to edit2 (see GCBO)
% eventdata  reserved - to be defined in a future version of MATLAB
% handles    structure with handles and user data (see GUIDATA)

% Hints: get(hObject,'String') returns contents of edit2 as text
%        str2double(get(hObject,'String')) returns contents of edit2 as a double


% --- Executes during object creation, after setting all properties.
function edit2_CreateFcn(hObject, eventdata, handles)
% hObject    handle to edit2 (see GCBO)
% eventdata  reserved - to be defined in a future version of MATLAB
% handles    empty - handles not created until after all CreateFcns called

% Hint: edit controls usually have a white background on Windows.
%       See ISPC and COMPUTER.
if ispc && isequal(get(hObject,'BackgroundColor'), get(0,'defaultUicontrolBackgroundColor'))
    set(hObject,'BackgroundColor','white');
end


% --- Executes on button press in pushbutton1.
function pushbutton1_Callback(hObject, eventdata, handles)
% hObject    handle to pushbutton1 (see GCBO)
% eventdata  reserved - to be defined in a future version of MATLAB
% handles    structure with handles and user data (see GUIDATA)
str1 = get(handles.edit1,'string');
str2 = get(handles.edit2,'string');

handles.str1 = str1;
handles.str2 = str2;
guidata(hObject,handles); 

result = Result(handles);%组合字符串的操作留给Result.fig来,然后让该fig返回组合后的结果
set(handles.text5, 'string', result);


猜你喜欢

转载自blog.csdn.net/bible_reader/article/details/73138165