Hi,
I made a GUI to display an image and retrieve current point when clicked. I did this in 3 slightly different ways, but don't know why they work/don't work in each case. Could someone help explain why..?
Case 1: 'pts' is displayed in command window
function varargout = Atest2(varargin)% Begin initialization code - DO NOT EDIT
gui_Singleton = 1;gui_State = struct('gui_Name', mfilename, ... 'gui_Singleton', gui_Singleton, ... 'gui_OpeningFcn', @Atest2_OpeningFcn, ... 'gui_OutputFcn', @Atest2_OutputFcn, ... 'gui_LayoutFcn', [] , ... 'gui_Callback', []);if nargin && ischar(varargin{1}) gui_State.gui_Callback = str2func(varargin{1});endif nargout [varargout{1:nargout}] = gui_mainfcn(gui_State, varargin{:});else gui_mainfcn(gui_State, varargin{:});end% End initialization code - DO NOT EDIT
function Atest2_OpeningFcn(hObject, eventdata, handles, varargin)handles.output = hObject;guidata(hObject, handles);function varargout = Atest2_OutputFcn(hObject, eventdata, handles) varargout{1} = handles.output;function axes1_CreateFcn(hObject, eventdata, handles)Im = imagesc(imread('test.jpg'));set(Im,'HitTest','Off')set(hObject,'ButtonDownFcn',@axes1_ButtonDownFcn)function axes1_ButtonDownFcn(hObject, eventdata, handles)pts = hObject.CurrentPoint
Case 2: 'pts' is NOT displayed in command window (only difference: imshow instead of imagesc /imread)
function varargout = Atest2(varargin)% Begin initialization code - DO NOT EDITgui_Singleton = 1;gui_State = struct('gui_Name', mfilename, ... 'gui_Singleton', gui_Singleton, ... 'gui_OpeningFcn', @Atest2_OpeningFcn, ... 'gui_OutputFcn', @Atest2_OutputFcn, ... 'gui_LayoutFcn', [] , ... 'gui_Callback', []);if nargin && ischar(varargin{1}) gui_State.gui_Callback = str2func(varargin{1});endif nargout [varargout{1:nargout}] = gui_mainfcn(gui_State, varargin{:});else gui_mainfcn(gui_State, varargin{:});end% End initialization code - DO NOT EDITfunction Atest2_OpeningFcn(hObject, eventdata, handles, varargin)handles.output = hObject;guidata(hObject, handles);function varargout = Atest2_OutputFcn(hObject, eventdata, handles) varargout{1} = handles.output;function axes1_CreateFcn(hObject, eventdata, handles)Im = imshow('test.jpg');set(Im,'HitTest','Off')set(hObject,'ButtonDownFcn',@axes1_ButtonDownFcn)function axes1_ButtonDownFcn(hObject, eventdata, handles)pts = hObject.CurrentPoint
Case 3: Code in 'createfcn' moved to 'openingfcn'. Pts displays in command window, but now with only 2 arguments instead of 6.
function varargout = Atest2(varargin)% Begin initialization code - DO NOT EDITgui_Singleton = 1;gui_State = struct('gui_Name', mfilename, ... 'gui_Singleton', gui_Singleton, ... 'gui_OpeningFcn', @Atest2_OpeningFcn, ... 'gui_OutputFcn', @Atest2_OutputFcn, ... 'gui_LayoutFcn', [] , ... 'gui_Callback', []);if nargin && ischar(varargin{1}) gui_State.gui_Callback = str2func(varargin{1});endif nargout [varargout{1:nargout}] = gui_mainfcn(gui_State, varargin{:});else gui_mainfcn(gui_State, varargin{:});end% End initialization code - DO NOT EDITfunction Atest2_OpeningFcn(hObject, eventdata, handles, varargin)handles.output = hObject;guidata(hObject, handles);Im = imshow('test.jpg');set(Im,'HitTest','Off')set(hObject,'ButtonDownFcn',@axes1_ButtonDownFcn)function varargout = Atest2_OutputFcn(hObject, eventdata, handles) varargout{1} = handles.output;function axes1_CreateFcn(hObject, eventdata, handles)function axes1_ButtonDownFcn(hObject, eventdata, handles)pts = hObject.CurrentPoint
It seems almost as if there's a bug in my software..? (I'm using a free trial of Matlab 2014b (8.4.0.150421), on MacBook Air, OS X Yosemite 10.10.1.)
Best Answer