获取函数变量的值到GUI

时间:2014-11-03 23:19:28

标签: matlab function user-interface

我正在创建一个非常简单的GUI。 用户输入的一些参数由绘制图表的函数获取。 该函数使用另一个函数来计算let的值“d”。这些函数保存在不同的.m文件中。

如何从该功能中取出“d”并在点击按钮后将其放在GUI中(例如在编辑文本中)?

问题是我无法直接获取d,因为它存储在另一个文件中,我不知道从函数中获取它的命令。

感谢您的帮助!我希望不要含糊不清。

1 个答案:

答案 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非常简单,如下所示:

enter image description here

正如您所看到的,将变量分配给函数输出要简单得多。如果不可能,你可以选择B.希望有所帮助!