Overwrite the function handle with a newer state?
이전 댓글 표시
I am currently learning from Matt Fig's 41 GUIs. What I do not understand is why he writes this line: set(ln,'buttondownfcn',{@ax_bdfcn,S})? (it is from GUI_18). Not doing this way, clicking on the line does not generate a new one. However I would like to see what this line of code exactly does. Could anybody help me?
P.s. the same syntax is used in GUI_7.
Thanks in advance.
function [] = GUI_18()
% Demonstrate the use of the buttondownfcn for an axes.
% Clicking on the axes creates a random line. Note that clicking on the
% line does the same thing. This must be accounted for in the coding
% below, or clicking on the line would do nothing. Right click to delete
% the line.
%
% An exercise would be to alter the code so that right clicking recreates
% the plot in another figure window. This could be done at least two
% different ways.
%
%
% Author: Matt Fig
% Date: 7/15/2009
S.fh = figure('units','pixels',...
'position',[200 200 200 200],...
'menubar','none',...
'numbertitle','off',...
'name','GUI_18',...
'resize','off');
S.ax = axes('units','pixels',...
'position',[30 30 160 160],...
'fontsize',8,...
'buttondownfcn',{@ax_bdfcn,S},...
'nextplot','replacechildren');
function [] = ax_bdfcn(varargin)
% buttondownfcn for axes.
[h,S] = varargin{[1,3]}; % Extract the calling handle and structure.
% We need to account for when the user clicks the line instead of the axes.
if ~strcmpi(get(h,'type'),'axes')
h = findobj('children',h); %
end
seltype = get(S.fh,'selectiontype'); % Right-or-left click?
switch seltype
case 'alt'
cla % Delete the line.
case 'normal'
ln = plot(h,sort(rand(1,10))); % Plot a new line.
set(ln,'buttondownfcn',{@ax_bdfcn,S})
otherwise
% Do something else for double-clicks, etc.
end
Here starts GUI_7
function [] = GUI_7()
% Demonstrate how to store choice counters for multiple user choices.
% Creates a popup with two choices and a textbox to display the number of
% times each choice has been made.
%
%
% Author: Matt Fig
% Date: 7/15/2009
S.fh = figure('units','pixels',...
'position',[300 300 300 100],...
'menubar','none',...
'name','GUI_7',...
'numbertitle','off',...
'resize','off');
S.tx = uicontrol('style','tex',...
'unit','pix',...
'position',[10 15 280 20],...
'backgroundcolor',get(S.fh,'color'),...
'fontsize',12,'fontweight','bold',...
'string','OPTION 1: 0 OPTION 2: 0');
S.pp = uicontrol('style','pop',...
'unit','pix',...
'position',[10 60 280 20],...
'backgroundc',get(S.fh,'color'),...
'fontsize',12,'fontweight','bold',...
'string',{'option 1';'option 2'},'value',1);
S.CNT = [0 0]; % Holds the number of times each option has been called.
set(S.pp,'callback',{@pp_call,S}); % Set the callback.
function [] = pp_call(varargin)
% Callback for popupmenu.
S = varargin{3}; % Get the structure.
P = get(S.pp,'val'); % Get the users choice from the popup.
S.CNT(P) = S.CNT(P) + 1; % Increment the counter.
set(S.tx, 'string', sprintf('OPTION 1: %i OPTION 2: %i', S.CNT));
set(S.pp,'callback',{@pp_call,S}); % Save the new count.
채택된 답변
추가 답변 (0개)
카테고리
도움말 센터 및 File Exchange에서 Interactive Control and Callbacks에 대해 자세히 알아보기
제품
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!