我正在创建一个非常简单的GUI。 用户输入的一些参数由绘制图表的函数获取。 该函数使用另一个函数来计算let的值“d”。这些函数保存在不同的.m文件中。
如何从该功能中取出“d”并在点击按钮后将其放在GUI中(例如在编辑文本中)?
问题是我无法直接获取d,因为它存储在另一个文件中,我不知道从函数中获取它的命令。
感谢您的帮助!我希望不要含糊不清。
答案 0 :(得分:1)
我认为@chappjc提供的选项是获得价值的最佳方式。我提出了另一种方法,使用setappdata和getappdata也可以找到帮助。这些用于在某些工作空间(例如,基础工作空间或特定功能的工作空间)中存储变量,并且可用于在功能之间共享数据。在这个例子中,我使用Matlab根,即' base'工作区。
在下面的代码中有2个函数,一个名为ABCFunction,它计算d,而函数叫ABCGUI,这是一个简单的GUI来演示这一点。基本上用户在3个编辑文本框中输入3个值,按下按钮后,d通过功能' ABCFunction'计算,输出显示在编辑框中。
chappjc提出的方法称为选项A,使用setappdata / getappdata的选项是选项B.您可以在两个函数中注释相应的代码,以便查看它是如何工作的。结果是一样的。所以这里是:
1) ABC功能
function d = ABCFunction(a,b,c)
%// Option A
d = a*b+c;
%//Option B
d = a*b+c; %// Does not change from Option A.
setappdata(0,'dInFunction',d); %// Assign the result, d, in a variable that you will call from your main GUI. See below.
end
2) ABCGui功能
function ABCGui(~)
% Create the GUI figure.
handles.figure = figure('Visible','on','Position',[360,500,300,285]);
handles.texta = uicontrol('Style','text','String','Enter a',...
'Position',[50,140,60,15]);
handles.edita = uicontrol('Style','edit','String','',...
'Position',[50,120,60,20]);
handles.textb = uicontrol('Style','text','String','Enter b',...
'Position',[120,140,60,15]);
handles.editb = uicontrol('Style','edit','String','',...
'Position',[120,120,60,20]);
handles.textc = uicontrol('Style','text','String','Enter c',...
'Position',[190,140,60,15]);
handles.editc = uicontrol('Style','edit','String','',...
'Position',[180,120,60,20]);
handles.Button = uicontrol('Style','pushbutton','String','Calculate d','Position',[50,60,80,15],'Callback',@PushbuttonCallback);
handles.textd = uicontrol('Style','text','String','d = a*b+c',...
'Position',[80,90,80,15]);
handles.textResult = uicontrol('Style','text','String','',...
'Position',[175,90,60,15]);
guidata(handles.figure,handles) %// Update handles structure.
%============================================================
%// Setup callback of the pushbutton
function PushbuttonCallback(~,~)
handles = guidata(gcf); %// Retrieve handles structure
A = str2num(get(handles.edita,'String'));
B = str2num(get(handles.editb,'String'));
C = str2num(get(handles.editc,'String'));
%// Option A
d = ABCFunction(A,B,C); %// Call the function and assign the output directly to a variable.
%// Option B
ABCFunction(A,B,C); %// Call the function and fetch the variable using getappdata.
d = getappdata(0,'dInFunction');
set(handles.textResult,'String',num2str(d));
end
end
GUI非常简单,如下所示:
正如您所看到的,将变量分配给函数输出要简单得多。如果不可能,你可以选择B.希望有所帮助!