Check if GUI is open

40 visualizzazioni (ultimi 30 giorni)
Pollok Tim
Pollok Tim il 21 Set 2016
Risposto: Kristoffer Walker il 21 Ott 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.

Risposta accettata

Adam
Adam il 21 Set 2016
Modificato: Adam il 21 Set 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 Commenti
Pollok Tim
Pollok Tim il 21 Set 2016
Thanks a lot, now its running.
-Keep hold of the handle of the figure when you launch it.-
I understood that I get the handle of figure2 in its own openingFcn like this
% Get handle of figure2
figure2 = findobj('Type','figure','name','figure2');
% Saves figure2 for access in other .m-files
setappdata(0,'figure2',figure2);
And when I check if its open I use
% Get access to figure2
hfigure2 = getappdata(0,'figure2 ');
% either isgraphics() or ishghandle()
isgraphics(hfigure2);
ishghandle(hfigure2);
Both functions seem to work.
Adam
Adam il 21 Set 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.

Accedi per commentare.

Più risposte (4)

Benjamin Avants
Benjamin Avants il 17 Ott 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

Vahab Youssofzadeh
Vahab Youssofzadeh il 2 Giu 2017
Modificato: Vahab Youssofzadeh il 2 Giu 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'));

Nepenthes
Nepenthes il 17 Lug 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

Kristoffer Walker
Kristoffer Walker il 21 Ott 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

Categorie

Scopri di più su Graphics Object Programming in Help Center e File Exchange

Prodotti

Community Treasure Hunt

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

Start Hunting!

Translated by