How to change color of GUI window from Matlab command line
8 Ansichten (letzte 30 Tage)
Ältere Kommentare anzeigen
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
0 Kommentare
Akzeptierte Antwort
Geoff Hayes
am 16 Feb. 2018
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 Kommentare
Steven Lord
am 16 Feb. 2018
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')
Weitere Antworten (1)
Eric Alexander
am 10 Dez. 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 Kommentar
Rik
am 10 Dez. 2019
You don't need the cludge of using asignin. Simply returning S as an output of the function will be enough.
Siehe auch
Kategorien
Mehr zu Interactive Control and Callbacks finden Sie in Help Center und File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!