Check if GUI is open
    11 Ansichten (letzte 30 Tage)
  
       Ältere Kommentare anzeigen
    
    Pollok Tim
 am 21 Sep. 2016
  
    
    
    
    
    Beantwortet: Kristoffer Walker
 am 21 Okt. 2020
            Hi everybody
I believe the answer to this question already exists several times online, but everything I tried failed.
I got in a GUI-figure the option to open an other GUI-figure. In the second GUI I got plots and the first one can update these plots. Therefore its interesting to know if the second GUI is already/still open when I activate the update.
I tried:
     ~isempty(findobj('Tag','figure2'))
     ~isempty(findobj('Tag','axesInFigure2'))
     ~isempty(get(groot,'figure2'))
     isgraphics(h,'figure2')
but I get the same result no matter if figure2 is open or not.
Is there an other way to get this information? I think of eventlisteners: figurehasbeenopened, figurehasbeenclosed
Thanks for help.
0 Kommentare
Akzeptierte Antwort
  Adam
      
      
 am 21 Sep. 2016
        
      Bearbeitet: Adam
      
      
 am 21 Sep. 2016
  
      Keep hold of the handle of the figure when you launch it.
Then just do a
if ishghandle( otherFigureHandle )
or
if isgraphics( otherFigureHandle )
test when you want to see if it is open or not.
2 Kommentare
  Adam
      
      
 am 21 Sep. 2016
				It depends where you are launching it from. I never use findobj myself (well, rarely) because I keep hold of all my handles if I need them in the future as e.g.
hFig = MyGUI(...)
to launch a GUI named MyGUI.
Then later on I can just use hFig. I can't tell from your question whether you mean you have a custom-made figure (e.g. from GUIDE) or whether you mean just a standard launched figure.
I would not recommend using
setappdata( 0,... )
generally, especially with common names like 'figure2', but if it works then ok. I don't use setappdata most of the time, but if I do I attach my data to a specific figure handle rather than the root object to keep it linked to the specific application.
Weitere Antworten (4)
  Benjamin Avants
      
 am 17 Okt. 2017
        I know this question is old, but GUIDE created figures don't show up as results from findobj.
Instead, use
figure2handle = findall(0,'Tag','figure2');
if ~isempty(figure2handle)
    % figure exists
end
0 Kommentare
  Vahab Youssofzadeh
 am 2 Jun. 2017
        
      Bearbeitet: Vahab Youssofzadeh
 am 2 Jun. 2017
  
      Here's another solution:
h = get(0, 'Children');
isempty(findobj(h,'name','NAME OF THE GUI'));
% isempty (findobj (h,'tag','NAME OF THE GUI'));
0 Kommentare
  Nepenthes
 am 17 Jul. 2018
        This is a little late, but I chanced upon this solution when tackling a similar problem. H.isvalid or isvalid(H) should work. H can be a single handle, or a vector of handles. K>> H = figure; K>> G = plot(rand(5)); K>> delete(G(3:4)); K>> G.isvalid ans = 1 1 0 0 1 K>> H.isvalid ans = 1 K>> delete(H) K>> H.isvalid ans = 0
0 Kommentare
  Kristoffer Walker
 am 21 Okt. 2020
        None of the above seems to work for me when I am trying to detect if a GUI created from AppDesigner is open.  Does anyone know how to do this with AppDesigner GUI's?
Best regards,
Kris
0 Kommentare
Siehe auch
Kategorien
				Mehr zu Creating, Deleting, and Querying Graphics Objects finden Sie in Help Center und File Exchange
			
	Produkte
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!





