How to change color of GUI window from Matlab command line

Let's say I have a Matlab program that generates a GUI to display some results, and I want to change the background color of the GUI from the Matlab command line. Assume I don't know the GUI window tag name and don't already have access to its handle.
Below is an example GUI from Matt Fig. Once the code is run, what command line commands will turn the resulting GUI yellow?
function [] = GUI_1()
% Demonstrate how to delete an entry from a uicontrol string.
% Creates a listbox with some strings in it and a pushbutton. When user
% pushes the pushbutton, the selected entry in the listbox will be deleted.
%
% Suggested exercise: Modify the GUI so when the user deletes a certain
% string, the 'value' property is set to the previous string instead of to
% the first string.
%
%
% Author: Matt Fig
% Date: 7/15/2009
S.fh = figure('units','pixels',...
'position',[500 500 200 260],...
'menubar','none',...
'name','GUI_1',...
'numbertitle','off',...
'resize','off');
S.ls = uicontrol('style','list',...
'unit','pix',...
'position',[10 60 180 180],...
'min',0,'max',2,...
'fontsize',14,...
'string',{'one';'two';'three';'four'});
S.pb = uicontrol('style','push',...
'units','pix',...
'position',[10 10 180 40],...
'fontsize',14,...
'string','Delete String',...
'callback',{@pb_call,S});
function [] = pb_call(varargin)
% Callback for pushbutton, deletes one line from listbox.
S = varargin{3}; % Get the structure.
L = get(S.ls,{'string','value'}); % Get the users choice.
% We need to make sure we don't try to assign an empty string.
if ~isempty(L{1})
L{1}(L{2}(:)) = []; % Delete the selected strings.
set(S.ls,'string',L{1},'val',1) % Set the new string.
end

 Respuesta aceptada

KAE - you might be able to use gcf (to get the handle to the current figure) if we assume that your figure/GUI has focus. Then change it's colour as
set(gcf,'Color',[1 1 0])

3 comentarios

KAE
KAE el 16 de Feb. de 2018
Editada: KAE el 16 de Feb. de 2018
gcf works for the example I gave but for some reason it does not for the real case. When the real GUI window is shown, the following code
get(gcf, 'color')
opens a new figure window. I am sorry that I can't give an example to reproduce this behavior which would require understanding it.
Most of the time, I would expect a figure opened by a GUI will have its HandleVisiblity property set to 'callback' or 'off'. The gcf function can only "find" the current figure if its HandleVisibility is 'on'.
To find the handle of a figure whose HandleVisiblity is set to 'callback' or 'off' use the findall function. Figures are children ("in the hierarchy", to use the phrasing on the findall page) of groot (if you're using release R2014b or later) or 0 (for releases prior to release R2014b.)
findall(groot, 'Type', 'figure')
Steven - That must have been the case, since the following works as desired:
h = findall(groot, 'Type', 'figure'); % Returns handle to the GUI
set(h, 'color', 'y');
If you turn this into an answer I will accept it.

Iniciar sesión para comentar.

Más respuestas (1)

Eric Alexander
Eric Alexander el 10 de Dic. de 2019
i believe that in order for you to use set(gcf....) from the command window you need to set your figure's handlevisibility property to 'on'; This can be done when you first create the figure:
S.fh = figure('units','pixels',...
'position',[500 500 200 260],...
'menubar','none',...
'name','GUI_1',...
'numbertitle','off',...
'HandleVisibility','on',...
'resize','off');
Another note you should make is that the structure S that stores all of your variables is only accessible from inside the function GUI_1 and not local to the matlab workspace. You can send this structure to the workspace by running the command assignin('base','S',S) from inside the function on startup. This allows you to manipulate the GUI from the command window. Hope this helps!

1 comentario

Rik
Rik el 10 de Dic. de 2019
You don't need the cludge of using asignin. Simply returning S as an output of the function will be enough.

Iniciar sesión para comentar.

Categorías

Más información sobre Creating, Deleting, and Querying Graphics Objects en Centro de ayuda y File Exchange.

Etiquetas

Preguntada:

KAE
el 16 de Feb. de 2018

Comentada:

Rik
el 10 de Dic. de 2019

Community Treasure Hunt

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

Start Hunting!

Translated by