我正在创建一个gui,它将根据弹出菜单绘制数组图形。假设选择是“全部”A“B”和“C”。使用弹出菜单中的各个回调值可以轻松索引单元阵列。 I.E. 在弹出回调中:val = get(hObject,'Value')-1 - > handles.val = VAL 在按钮回调中:plot(cellarray(handles.val))
我的问题是如何做“全部”部分。我通常使用cellarray(:),我不能做handle.val =':'并传入它。我怎样才能动态访问整个单元格数组? (假设单元阵列是1 x 5。)
答案 0 :(得分:0)
这是一种解决问题的方法。
基本上我把'All'选项放在弹出菜单中字符串的末尾,如果用户选择它,则val等于6,即handles.Data+1
中的元素数量,这使得输入if语句的条件。
function GUI_PopUp
clc
clear
%// Generate dummy data
handles.Data = cell(1,5);
x = 1:20;
handles.Data{1} = rand(1,20);
handles.Data{2} = 2.*x-5;
handles.Data{3} = x-10;
handles.Data{4} = x;
handles.Data{5} = 3.*x;
handles.x = x; % I was lazy sorry :)
%// Create GUI components
hFigure = figure('Position',[100 100 500 500],'Units','Pixels');
handles.axes1 = axes('Units','Pixels','Position',[60,90,400,300]);
PopupString = {'1';'2';'3';'4';'5';'All'};
handles.Pop = uicontrol('Style','popup','Position',[100 380 40 60],'String',PopupString,'Callback',@(s,e) PopupCallback);
handles.text = uicontrol('Style','text','Position',[100 460 40 30],'String','Select data');
guidata(hFigure,handles);
function PopupCallback
handles = guidata(hFigure);
val = get(handles.Pop,'Value');
%// If selected 'All'
if val == (numel(handles.Data)+1)
hold all
for k = 1:numel(handles.Data)
plot(handles.x,handles.Data{k},'parent',handles.axes1)
end
else
plot(handles.x,handles.Data{val},'parent',handles.axes1)
end
end
end
选择了“全部”选项的示例屏幕截图:
希望有助于您入门!如果没有,请告诉我,我将修改代码!