MATLAB Answers

Is it possible to create "x" amount of objects with pop-up menus in GUI depending on the user input?

조회 수: 1(최근 30일)
David (degtusmc)
David (degtusmc) 28 Jun 2013
Hello everyone,
I am in the process of designing a Matlab GUI and I was wondering if what I want to do is even possible. If it is, I would appreciate if I can be pointed in the right direction.
The user will input a number in a text box. This number will be the amount of objects that will be created (inside the GUI). Each object will have two different menus with additional options. Am I able to accomplish this using Matlab GUI?
Thank you in advance for any help provided.

채택된 답변

Tom
Tom 28 Jun 2013
편집: Tom 29 Jun 2013
You can do it programatically, using the UICONTROL function
function Create_Panels(varargin)
%tile a series of panels, each containing two listboxes
%argument 1: number of panels to create (otherwise default of 6)
if nargin > 0
nPanels = varargin{1};
if ~isnumeric(nPanels) || numel(nPanels) ~= 1 || nPanels < 1
error('please enter an integer greater than 0')
else
nPanels = round(nPanels);
end
else
nPanels = 6;
end
%create figure
figPos = [100 50 1000 600];
F = figure('Position',figPos);
%gaps between panels
horzSpc = 10;
vertSpc = 10;
%arrange tiling of panels
nHorz = ceil(sqrt(nPanels));
nVert = round(nPanels/nHorz);
[gridHorz gridVert] = meshgrid(1:nVert,1:nHorz);
%calculate panel size
panelHeight = round((figPos(4) - vertSpc) / nVert -vertSpc);
panelWidth = round((figPos(3) - horzSpc) / nHorz -horzSpc);
u = zeros(nPanels,1);
for n = 1:nPanels
x = horzSpc + (gridVert(n)-1)*(panelWidth + horzSpc);
y = vertSpc + (gridHorz(n)-1)*(panelHeight + vertSpc);
u(n) = Panel_Gen(x,y,panelHeight,panelWidth);
set(u(n),'Title',sprintf('Panel %d',n))
end
function u = Panel_Gen(x,y,h,w)
u = uipanel('Units','Pixels',...
'Position',[x y w h]);
%listboxes:
uicontrol('Style','popup',...
'Parent',u,...
'Position',[10, 10, ((w-10)/2)-10 h-30],...
'String',{'One', 'Two' ,'Three'})
uicontrol('Style','popup',...
'Parent',u,...
'Position',[((w-10)/2) + 10, 10, ((w-10)/2)-10, h-30],...
'String',{'Uno', 'Dos', 'Tres'})
  댓글 수: 3
David (degtusmc)
David (degtusmc) 1 Jul 2013
Thank you Tom. I tried your suggestion and it worked. Is there a way to create the panels under the input text box, rather than opening new windows (figures)? The reason, I am asking is because I would like to have more control over the amount of objects created (i.e. adding or removing panels).

댓글을 달려면 로그인하십시오.

Community Treasure Hunt

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

Start Hunting!

Translated by