필터 지우기
필터 지우기

Axes error in GUI

조회 수: 8 (최근 30일)
Sophie Lis
Sophie Lis 2018년 7월 6일
댓글: Arwinsyah Putra 2020년 8월 11일
I am trying to move through a series of images in a GUI but receive the following error when pressing the 'next block' button following the load button. The 'next block' button should display on the two axes on the screen the next 2 figures
{Error: Struct contents reference from a non-struct array object.
Error in Block_Sort>next_block_Callback (line 93) a1 = axes(handles.axes1);
Error in gui_mainfcn (line 95) feval(varargin{:});
Error in Block_Sort (line 42) gui_mainfcn(gui_State, varargin{:});
Error in matlab.graphics.internal.figfile.FigFile/read>@(hObject,eventdata)Block_Sort('next_block_Callback',hObject,eventdata,guidata(hObject)) 93 a1 = axes(handles.axes1);
} function next_block_Callback(hObject, eventdata, handles)
% hObject handle to next_block (see GCBO)
% eventdata reserved - to be defined in a future version of MATLAB
% handles structure with handles and user data (see GUIDATA)
images = guidata(hObject);
a1 = axes(handles.axes1);
a2 = axes(handles.axes2);
for i = 1:length(images)
I = images{i+1};
J = images{i+2};
imshow(a1,I);
imshow(a2,J);
end
function load_Callback(hObject, eventdata, handles)
% hObject handle to load (see GCBO)
% eventdata reserved - to be defined in a future version of MATLAB
% handles structure with handles and user data (see GUIDATA)
addpath(pwd)
animal = evalin('base','animal');
foldname = ['Selected-Figures-' animal '*'];
filename = dir(foldname);
dinfo = dir(filename.name);
addpath(filename.name);
names_cell = {dinfo.name};
names_cell = names_cell(3:end);
images = cell(1,length(names_cell));
for i = 1:length(names_cell)
curr_file_name = names_cell{i};
curr_im = imread(curr_file_name);
images{i} = curr_im;
end
guidata(hObject,images);
I = imread(names_cell{1});
I = imresize(I,2);
J = imread(names_cell{2});
J = imresize(J,2);
axes(handles.axes1);
imshow(I);
axes(handles.axes2);
imshow(J);
  댓글 수: 2
Geoff Hayes
Geoff Hayes 2018년 7월 6일
Sophie - how are you launching your GUI? From the command line, the run button in the m-file editor, or through GUIDE?
Or, are you double-clicking on the figure file? I wonder if this is the case since the error message is telling you Struct contents reference from a non-struct array object which seems to correspond to your code handles.axes1. If you open your GUI through the figure file, then this will not properly initialize your GUI and so it will be unusable. You need to launch the GUI through one of the above three methods.
Arwinsyah Putra
Arwinsyah Putra 2020년 8월 11일
thanks ;)
it's really help

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

채택된 답변

OCDER
OCDER 2018년 7월 6일
편집: OCDER 2018년 7월 6일
Geoff's answer will probably resolve your initial error, but you'll probably run into issues at the same place. Note that Axes cannot return an output if used like a1 = axes(handles.axes1).
EXAMPLE:
handles.axes1 = axes; %Creates a new axes
a1 = axes(handles.axes1); %ERROR: Too many output arguments
If you want to draw an image in a particular axes, use the 'Parent' option like this:
imshow(I, 'parent', handles.axes1)
That way, you don't have to track which axes is the first axes, etc. Another way is to directly set the imshow's CData property.
Ix = imshow([], 'parent', handles.axes1); %initialize the imshow handle somewhere
Ix.CData = rand(100); %change the image shown by the imshow area
  댓글 수: 11
Sophie Lis
Sophie Lis 2018년 7월 6일
It works, thank you so much!!
OCDER
OCDER 2018년 7월 6일
You're welcome!

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

추가 답변 (0개)

카테고리

Help CenterFile Exchange에서 Migrate GUIDE Apps에 대해 자세히 알아보기

태그

Community Treasure Hunt

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

Start Hunting!

Translated by