如何在matlab中从一个gui到另一个gui检索数据?

时间:2015-05-07 14:59:21

标签: matlab user-interface

我有两个GUI。在第一个gui我想绘制一个输入信号(例如:正弦信号)。我的问题是,在点击“加载”后,如何在第二个GUI中绘制相同的信号?第二个GUI中的按钮?有人能帮助我吗?我真的需要帮助。

1 个答案:

答案 0 :(得分:2)

以下是一些代码,可帮助您使用setappdatagetappdata。这是非常基本的,有些事我没有提到(例如使用句柄结构或传递变量作为函数的输入参数),但使用setappdatagetappdata是一种安全的方法。

我创建了2个程序化GUI。代码看起来与使用GUIDE设计GUI时略有不同,但原理完全相同。花点时间检查一下,了解一切的作用;这不是太复杂。

每个GUI由一个按钮和一个轴组成。在第一个GUI(sine_signal)中,创建并显示正弦波。按下按钮打开第二个GUI(gui_filtering)并调用setappdata。按下第二个GUI的按钮后,将调用setappdata来获取数据并绘制它。

以下是两个GUI的代码。您可以将它们保存为.m文件,然后在sine_signal功能中按“运行”。

1) sine_signal

function sine_signal

clear
clc

%// Create figure and uicontrols. Those will be created with GUIDE in your
%// case.
hFig_sine = figure('Position',[500 500 400 400],'Name','sine_signal');

axes('Position',[.1 .1 .8 .8]);

uicontrol('Style','push','Position',[10 370 120 20],'String','Open gui_filtering','Callback',@(s,e) Opengui_filt);

%// Create values and plot them.
xvalues = 1:100;
yvalues = sin(xvalues).*cos(xvalues);

plot(xvalues,yvalues);

%// Put the x and y values together in a single array.
AllValues = [xvalues;yvalues];

%// Use setappdata to associate "AllValues" with the root directory (0).
%// This way the variable is available from anywhere. You could also
%// associate the data with the GUI itself, using "hFig_sine" instead of "0".

setappdata(0,'AllValues',AllValues);

%// Callback of the pushbutton. In this case it is simply used to open the
%// 2nd GUI.

    function Opengui_filt

        gui_filtering

    end
end

2) gui_filtering

function gui_filtering

%// Same as 1st GUI.
figure('Position',[1000 1000 400 400],'Name','sine_signal')

axes('Position',[.1 .1 .8 .8])

%// Pushbutton to load data
uicontrol('Style','push','Position',[10 370 100 20],'String','Load/plot data','Callback',@(s,e) LoadData);

%// Callback of the pushbutton
    function LoadData

        %// Use "getappdata" to retrieve the variable "AllValues".

        AllValues = getappdata(0,'AllValues');

        %// Plot the data
        plot(AllValues(1,:),AllValues(2,:))        
    end
end

为了显示预期的输出,以下是在以下时间获得的3个屏幕截图:

1)您运行第一个GUI(sine signal):

enter image description here

2)按下按钮后打开第二个GUI:

enter image description here

3)按下第二个GUI按钮后加载/显示数据:

enter image description here

就是这样。希望有所帮助!