我有两个GUI。在第一个gui我想绘制一个输入信号(例如:正弦信号)。我的问题是,在点击“加载”后,如何在第二个GUI中绘制相同的信号?第二个GUI中的按钮?有人能帮助我吗?我真的需要帮助。
答案 0 :(得分:2)
以下是一些代码,可帮助您使用setappdata
和getappdata
。这是非常基本的,有些事我没有提到(例如使用句柄结构或传递变量作为函数的输入参数),但使用setappdata
和getappdata
是一种安全的方法。
我创建了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
):
2)按下按钮后打开第二个GUI:
3)按下第二个GUI按钮后加载/显示数据:
就是这样。希望有所帮助!