Error while evaluating uicontrol Callback when using two buttons

조회 수: 8 (최근 30일)
Tan Huynh
Tan Huynh 2015년 12월 17일
댓글: Tan Huynh 2015년 12월 18일
Hi everyone, I have got a Problem with my GUI. My program has two buttons, I use the first button to choose a specific file in subfolder.
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)
[filename, pathname, filterindex] = uigetfile( ...
{ '*.mat','MAT-files (*.mat)'; ...
'*.slx;*.mdl','Models (*.slx, *.mdl)'; ...
'*.txt','Text Files (*.txt)'; ...
'*.*', 'All Files (*.*)'}, ...
'Pick a file', ...
'MultiSelect', 'on',...
'..\Schaltungen\');
if isequal(filename,0)
disp('User selected: Cancel')
else
disp(['User selected ', fullfile(pathname, filename)])
end
global fname;
assignin ('base','fname',filename);
%assignin ('base','path',pathname);
%fname = strcat(pathname,filename);
%assignin ('base','fname',fname);
%callback of button 1
handles.fname = fname;
guidata(hObject, handles)
When I declare the button 2 with containing the m.file , the code in m.file is
[Name, N1, N2, arg3]=textread(fname,'%s %s %s %s ');
in which to process variable fname which i have got already at button 1. And the code for callback in Button 2 is
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)
global fname;
fname = 'handles.fname';
And my program got some errors,
Error using textread (line 165)
File not found.
Error in scam (line 13)
[Name, N1, N2, arg3]=textread(fname,'%s %s %s %s ');
Error in demogui>pushbutton2_Callback (line 112)
scam
Error in gui_mainfcn (line 95)
feval(varargin{:});
Error in demogui (line 42)
gui_mainfcn(gui_State, varargin{:});
Error in @(hObject,eventdata)demogui('pushbutton2_Callback',hObject,eventdata,guidata(hObject))
Error while evaluating uicontrol Callback
I don't know exactly what happening with this program. Hope to receive your supports.

채택된 답변

Geoff Hayes
Geoff Hayes 2015년 12월 17일
Tan - I think that the error may be originating in the second push button callback where you assign
fname = 'handles.fname';
and so the file that textread will attempt to read from is the string 'handles.filename' and not the filename that is referenced by this field. Wrapping this variable in quotes simply creates a string of that variable name.
You also don't need to declare fname as a global or assign it into the base workspace. Like you have already shown in the first pushbutton callback, just assign it as a field to the handles structure. The callback can then be simplified as
function pushbutton1_Callback(hObject, eventdata, handles)
[filename, pathname, filterindex] = uigetfile( ...
{ '*.mat','MAT-files (*.mat)'; ...
'*.slx;*.mdl','Models (*.slx, *.mdl)'; ...
'*.txt','Text Files (*.txt)'; ...
'*.*', 'All Files (*.*)'}, ...
'Pick a file', ...
'MultiSelect', 'on',...
'..\Schaltungen\');
if isequal(filename,0)
disp('User selected: Cancel')
handles.fname = '';
else
fname = fullfile(pathname, filename);
disp(['User selected ', fname]);
handles.fname = fname;
end
guidata(hObject, handles)
In the above, we save the path and filename to handles.fname (if the doesn't choose a file, then this field is set to an empty string). Now, in your second callback you can access this file as
function pushbutton2_Callback(hObject, eventdata, handles)
if isfield(handles,'fname')
if ~isempty(handles.fname)
fname = handles.fname;
[Name, N1, N2, arg3]=textread(fname,'%s %s %s %s ');
end
end
  댓글 수: 1
Tan Huynh
Tan Huynh 2015년 12월 18일
Thank you for your clear explaning. It is very useful. It is working good. @ Geoff Hayes

댓글을 달려면 로그인하십시오.

추가 답변 (0개)

카테고리

Help CenterFile Exchange에서 Code Execution에 대해 자세히 알아보기

태그

Community Treasure Hunt

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

Start Hunting!

Translated by