How to add minimize tool button in GUI ?
3 views (last 30 days)
Show older comments
I have a GUI which has several charts/graphs to display. But I would like to add an GUI object whose function is to minimize /maximize or restore the graph/plot within the GUI using a button. How can I do it? I have seen the list of GUI components, none of them are relevant to what I am looking for. Is it possible to import new functionality from other development environments like Microsoft .Net /Visual Studio or JAVA to MATLAB.
1 Comment
Jan
on 8 Jul 2018
It depends on what "minimize /maximize or restore the graph/plot" exactly means. A button, which makes an axes object and all its children invisible`? This would be easy to implement.
Accepted Answer
Jan
on 8 Jul 2018
Edited: Jan
on 8 Jul 2018
function main
Gui.FigH = figure;
Gui.AxesH = axes;
Gui.ButtonH = uicontrol('Style', 'ToggleButton', 'Value', 1, ...
'String', 'Show axes', ...
'Units', 'pixels', ...
'Position', [5, 5, 80, 25], ...
'Callback', @ButtonCB);
plot(rand(10));
Gui.ButtonH.Units = 'normalized';
Gui.ButtonPos = Gui.ButtonH.Position;
Gui.ButtonH.Units = 'pixels';
Gui.AxesPos = Gui.AxesH.Position;
guidata(Gui.FigH, Gui);
end
function ButtonCB(ButtonH, EventData)
Gui = guidata(ButtonH);
if ButtonH.Value
state = 'on';
else
state = 'off';
end
set(Gui.AxesH, 'Visible', state);
set(allchild(Gui.AxesH), 'Visible', state);
end
This is a kind of "minimizing" already and really cheap to implement. You can write a zooming or moving out of the visible area easily also. Change the callback to:
function ButtonCB(ButtonH, EventData)
Gui = guidata(ButtonH);
if ButtonH.Value
ini = Gui.ButtonPos;
fin = Gui.AxesPos;
state = 'on';
else
ini = Gui.AxesPos;
fin = Gui.ButtonPos;
state = 'off';
end
% Make axes visible and move it to or from the button position:
set(Gui.AxesH, 'Visible', 'on');
set(allchild(Gui.AxesH), 'Visible', 'on');
n = 20;
step = (fin - ini) / n;
for k = 1:n
set(Gui.AxesH, 'Position', ini + k * step);
drawnow;
end
set(Gui.AxesH, 'Visible', state);
set(allchild(Gui.AxesH), 'Visible', state);
end
In this example the axes is moved to or from the position of the button. Other effects are easy to implement also: Moving above the top of the window, shrinking inplace until they vanish, etc. Of course there are many ways to overdue the effects...
0 Comments
More Answers (1)
Image Analyst
on 8 Jul 2018
The GUI already comes with controls in its title bar for minimizing, maximizing, and normalizing the whole window.
If you want to minimize just one axes on the GUI, then it might be best to just put the entire axes control into a panel control and set the visibility property of the panel on or off. There are other ways but they're more complicated because a graph has lots of handles associated with it, not just one like a panel does.
See Also
Categories
Find more on Migrate GUIDE Apps in Help Center and File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!