Trying to Program a Switch-Case Expression for a Pop-up Menu in a MATLAB GUI

2 次查看(过去 30 天)
Can someone tell me what's wrong with my syntax or any other errors you spot?
% --- Executes on selection change in popupmenu_filters.
function popupmenu_filters_Callback(hObject, eventdata, handles)
% hObject handle to popupmenu_filters (see GCBO)
% eventdata reserved - to be defined in a future version of MATLAB
% handles structure with handles and user data (see GUIDATA)
% determine which filter to apply by reading string in pop-up menu
str = get(hObject, 'String');
val = get(hObject, 'Value');
% set current filter to the user-selected filter
switch str{val};
case 'imdilate'
handles.current_filter = imdilate
case 'imerode'
handles.current_filter = imerode
case 'imopen'
handles.current_filter = imopen
case 'imclose'
handles.current_filter = imclose
case 'imtophat'
handles.current_filter = imtophat
case 'imbothat'
handles.current_filter = imbothat
case 'entropy filter'
handles.current_filter = entropyfilt
end
handles.image2 = handles.current_filter(handles.image);
handles.axes2(imshow(handles.image2));
% pushbutton_save handles structure
guidata(hObject, handles);

采纳的回答

Walter Roberson
Walter Roberson 2012-7-18
handles.current_filter = @imdilate;
Without the @ it is going to _ call_ imdilate with no arguments.

更多回答(2 个)

Caleb
Caleb 2012-7-19
So when I'm adding slider capability to the code, how do I call that within the program. Would it be:
handles.image2 = handles.current_filter(handles.image, [handles.slider1 handles.slider2];
or something like that?
  5 个评论
Caleb
Caleb 2012-7-23
And using the @function_handle has worked so far. I just haven't been able to apply the changes from the slider to the function.

请先登录,再进行评论。


Sean de Wolski
Sean de Wolski 2012-7-19
编辑:Sean de Wolski 2012-7-19
Rather than using switch I would package this as a cell array of function handles and then extract the value:
ops={@imdilate,@imerode,@imopen} %etc
handles.current_filter = ops{val};
  4 个评论
Caleb
Caleb 2012-7-19
编辑:Caleb 2012-7-19
Now it's giving me this error:
Attempted to access handles.axes2(234.013); index must be a positive integer or logical.
Error in FESgui>popupmenu_filters_Callback (line 562)
handles.axes2(imshow(handles.image2));
Even though my handles structure contains handles for axes2
pushbutton_browse: 238.0118
axes2: 233.0125
axes1: 228.0066
uipanel5: 243.0062
uipanel4: 241.0061
uipanel3: 239.0079
uipanel2: 56.0078

请先登录,再进行评论。

类别

Help CenterFile Exchange 中查找有关 Functions 的更多信息

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by