How to change color of GUI window from Matlab command line
7 次查看(过去 30 天)
显示 更早的评论
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 个评论
采纳的回答
Geoff Hayes
2018-2-16
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 个评论
Steven Lord
2018-2-16
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')
更多回答(1 个)
Eric Alexander
2019-12-10
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 个评论
Rik
2019-12-10
You don't need the cludge of using asignin. Simply returning S as an output of the function will be enough.
另请参阅
类别
在 Help Center 和 File Exchange 中查找有关 Interactive Control and Callbacks 的更多信息
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!