Pause until a figure close OR a button is pressed
    23 views (last 30 days)
  
       Show older comments
    
Hi.
In the middle of my script I ask the user to zoom a figure and call ginput afterwards. I would like to interrupt (return) the script if the user closes the figure. Right now I did
h=figure;
plot(1:1000,randn(1000,1))
zoom on
pause
if ~isvalid(h),return,end
try 
  [x,y]=ginput(1)
end
However this waits for the user to click a button even if the figure is closed. That is, the user closes the figure, but the script does not notice it until it ALSO press a button. The uiwait or waitfor command could understand if the figure is closed, but then I have to close the figure in order to make the script continue.
Is it possible to obtain a result similar to
figure
zoom on
event=pauseOrWaitfor
if event=='figureClosed'
  return
elseif event=='userClickedAButton'
  %Do other things here
end
thank you
0 Comments
Answers (1)
  Jan
      
      
 on 15 Nov 2016
        
      Edited: Jan
      
      
 on 15 Nov 2016
  
      h = figure;
drawnow;
disp(clock)
waitfor(h)
disp(clock)
2 Comments
  Mathias Bannwart
 on 18 Jan 2018
				If both options are needed you could use waitforbuttonpress to detect if the user presses a key or clicks a mouse button and catch closing of the figure in a try/catch statement:
h = figure;
drawnow;
disp(clock)
try
    waitforbuttonpress
    % Close figure or leave it open
    close(h)
    disp('mouse or key pressed')
catch
    disp('figure closed')
end
disp(clock)
Note that focus on the current figure is required (from R2014 on) to resume program execution after mouse or button presses.
See Also
Categories
				Find more on Creating, Deleting, and Querying Graphics Objects in Help Center and File Exchange
			
	Products
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!

