Message Error - Problem with GUI tutorial

2 views (last 30 days)
Hi,
I am learning how to create an app that has a simple user interface through this tutorial: https://www.mathworks.com/help/matlab/creating_guis/about-the-simple-guide-gui-example.html?s_tid=srchtitle . After going thoroughly through all steps mentioned in the text, I get the following error message when running the app:
Here's the code I put in:
function varargout = MATLAB_GUI_Tutorial(varargin)
% MATLAB_GUI_TUTORIAL MATLAB code for MATLAB_GUI_Tutorial.fig
% MATLAB_GUI_TUTORIAL, by itself, creates a new MATLAB_GUI_TUTORIAL or raises the existing
% singleton*.
%
% H = MATLAB_GUI_TUTORIAL returns the handle to a new MATLAB_GUI_TUTORIAL or the handle to
% the existing singleton*.
%
% MATLAB_GUI_TUTORIAL('CALLBACK',hObject,eventData,handles,...) calls the local
% function named CALLBACK in MATLAB_GUI_TUTORIAL.M with the given input arguments.
%
% MATLAB_GUI_TUTORIAL('Property','Value',...) creates a new MATLAB_GUI_TUTORIAL or raises the
% existing singleton*. Starting from the left, property value pairs are
% applied to the GUI before MATLAB_GUI_Tutorial_OpeningFcn gets called. An
% unrecognized property name or invalid value makes property application
% stop. All inputs are passed to MATLAB_GUI_Tutorial_OpeningFcn via varargin.
%
% *See GUI Options on GUIDE's Tools menu. Choose "GUI allows only one
% instance to run (singleton)".
%
% See also: GUIDE, GUIDATA, GUIHANDLES
% Edit the above text to modify the response to help MATLAB_GUI_Tutorial
% Last Modified by GUIDE v2.5 10-Oct-2018 09:36:26
% Begin initialization code - DO NOT EDIT
gui_Singleton = 1;
gui_State = struct('gui_Name', mfilename, ...
'gui_Singleton', gui_Singleton, ...
'gui_OpeningFcn', @MATLAB_GUI_Tutorial_OpeningFcn, ...
'gui_OutputFcn', @MATLAB_GUI_Tutorial_OutputFcn, ...
'gui_LayoutFcn', [] , ...
'gui_Callback', []);
if nargin && ischar(varargin{1})
gui_State.gui_Callback = str2func(varargin{1});
end
if nargout
[varargout{1:nargout}] = gui_mainfcn(gui_State, varargin{:});
else
gui_mainfcn(gui_State, varargin{:});
end
% End initialization code - DO NOT EDIT
% --- Executes just before MATLAB_GUI_Tutorial is made visible.
function MATLAB_GUI_Tutorial_OpeningFcn(hObject, eventdata, handles, varargin)
% This function has no output args, see OutputFcn.
% hObject handle to figure
% eventdata reserved - to be defined in a future version of MATLAB
% handles structure with handles and user data (see GUIDATA)
% varargin command line arguments to MATLAB_GUI_Tutorial (see VARARGIN)
% Create the data to plot.
handles.peaks=peaks(35);
handles.membrane=membrane;
[x,y] = meshgrid(-8:.5:8);
r = sqrt(x.^2+y.^2) + eps;
sinc = sin(r)./r;
handles.sinc = sinc;
% Set the current data value.
handles.current_data = handles.peaks;
surf(handles.current_data)
% Choose default command line output for MATLAB_GUI_Tutorial
handles.output = hObject;
% Update handles structure
guidata(hObject, handles);
% UIWAIT makes MATLAB_GUI_Tutorial wait for user response (see UIRESUME)
% uiwait(handles.figure1);
% --- Outputs from this function are returned to the command line.
function varargout = MATLAB_GUI_Tutorial_OutputFcn(hObject, eventdata, handles)
% varargout cell array for returning output args (see VARARGOUT);
% hObject handle to figure
% eventdata reserved - to be defined in a future version of MATLAB
% handles structure with handles and user data (see GUIDATA)
% Get default command line output from handles structure
varargout{1} = handles.output;
% --- Executes on button press in pushbutton1.
function pushbutton1_Callback(hObject, eventdata, handles)
% hObject handle to pushbutton1 (see GCBO)
% eventdata reserved - to be defined in a future version of MATLAB
% handles structure with handles and user data (see GUIDATA)
% Display surf plot of the currently selected data.
surf(handles.current_data);
% --- Executes on button press in pushbutton2.
function pushbutton2_Callback(hObject, eventdata, handles)
% hObject handle to pushbutton2 (see GCBO)
% eventdata reserved - to be defined in a future version of MATLAB
% handles structure with handles and user data (see GUIDATA)
% Display mesh plot of the currently selected data.
mesh(handles.current_data);
% --- Executes on button press in pushbutton3.
function pushbutton3_Callback(hObject, eventdata, handles)
% hObject handle to pushbutton3 (see GCBO)
% eventdata reserved - to be defined in a future version of MATLAB
% handles structure with handles and user data (see GUIDATA)
% Display contour plot of the currently selected data.
contour(handles.current_data);
% --- Executes on selection change in popupmenu1.
function popupmenu1_Callback(hObject, eventdata, handles)
% hObject handle to popupmenu1 (see GCBO)
% eventdata reserved - to be defined in a future version of MATLAB
% handles structure with handles and user data (see GUIDATA)
% Determine the selected data set.
str = get(hObject, 'String');
val = get(hObject,'Value');
% Set current data to the selected data set.
switch str{val};
case 'peaks' % User selects peaks.
handles.current_data = handles.peaks;
case 'membrane' % User selects membrane.
handles.current_data = handles.membrane;
case 'sinc' % User selects sinc.
handles.current_data = handles.sinc;
end
% Save the handles structure.
guidata(hObject,handles)
% Hints: contents = cellstr(get(hObject,'String')) returns popupmenu1 contents as cell array
% contents{get(hObject,'Value')} returns selected item from popupmenu1
% --- Executes during object creation, after setting all properties.
function popupmenu1_CreateFcn(hObject, eventdata, handles)
% hObject handle to popupmenu1 (see GCBO)
% eventdata reserved - to be defined in a future version of MATLAB
% handles empty - handles not created until after all CreateFcns called
% Hint: popupmenu controls usually have a white background on Windows.
% See ISPC and COMPUTER.
if ispc && isequal(get(hObject,'BackgroundColor'), get(0,'defaultUicontrolBackgroundColor'))
set(hObject,'BackgroundColor','white');
end
I am a neophyte at creating GUI so thank you for your understanding!
Alan

Accepted Answer

OCDER
OCDER on 15 Oct 2018
I can't seem anything obviously wrong on the code side of things. Use debugging methods to figure out what is the contents of str and val, and use this code for now for that callback function:
function popupmenu1_Callback(hObject, eventdata, handles)
str = get(hObject, 'String');
val = get(hObject, 'Value');
fprintf('str-> class: %s, numel:%d\n', class(str), numel(str));
fprintf('val-> class: %s, numel:%d\n', class(val), numel(val));
% Set current data to the selected data set.
switch lower(str{val}) %Make case-insenstiive just in case
case 'peaks' % User selects peaks.
handles.current_data = handles.peaks;
case 'membrane' % User selects membrane.
handles.current_data = handles.membrane;
case 'sinc' % User selects sinc.
handles.current_data = handles.sinc;
otherwise
error('Not a valid options. Recheck your GUI setup');
end
guidata(hObject,handles)
In your command line, type this:
dbstop if error
Run your GUI to generate that error. If the error appears, your Matlab text editor should open up to the line that the error occurs. Figure out what the value of str and val is. str should be a cell array of strings, and val should be an integer >= 1 and <= numel(str). If it isn't, something is wrong with the way you setup the popupmenu. Check the properties of that in you .fig file via GUIDE (right click .fig file, open with GUIDE, right-click popupmenu and go to properties. Look at the string and value properties.)
Last note: Make sure you are running the GUI via the .m file, and not by double-clicking the .fig file.
  4 Comments
Alan Picard
Alan Picard on 16 Oct 2018
Using "strtrim" now solves the problem and I can run the user interface without any bugs. I'll try, as you mentioned, to solve this issue by applying the other suggestions you have provided.
Thanks once more OCDER!

Sign in to comment.

More Answers (0)

Categories

Find more on Interactive Control and Callbacks in Help Center and File Exchange

Tags

Community Treasure Hunt

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

Start Hunting!