Matlab - Con listbox y pushbutton

   
Vista:

Con listbox y pushbutton

Publicado por jerso (11 intervenciones) el 19/02/2008 18:02:22
Tengo un listbox definido con muchas opciones y quiero que al darle al pushbutton vaya a otro gui.
Como lo hago con switch
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

RE:Con listbox y pushbutton

Publicado por Kike (304 intervenciones) el 19/02/2008 23:40:17
En la función de apertura creo un arreglo que tiene las opciones, y lo declaro como global.
function unt_OpeningFcn(hObject, eventdata, handles, varargin)
% This function has no output args, see OutputFcn.
% hObject handle to figure
% eventdata reserved - to be defined in a future version of MATLAB
% handles structure with handles and user data (see GUIDATA)
% varargin command line arguments to unt (see VARARGIN)

% Choose default command line output for unt
handles.output = hObject;

global opciones

opciones={'Opcion 1','Opcion 2','Opcion 3'};

set(handles.listbox1,'String',opciones);

% Update handles structure
guidata(hObject, handles);

En el callback del pushbutton vuelvo a declarar como global al arreglo. Y se invoca a otros GUI dependiendo de la opción seleccionada.

function pushbutton1_Callback(hObject, eventdata, handles)
% hObject handle to pushbutton1 (see GCBO)
% eventdata reserved - to be defined in a future version of MATLAB
% handles structure with handles and user data (see GUIDATA)

global opciones

opc=get(handles.listbox1,'Value');

switch opc
case 1, disp(opciones{1});
otro_gui;
case 2, disp(opciones{2});
otro_gui2;
case 3, disp(opciones{3});
otro_gui3;
end
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Con listbox y pushbutton

Publicado por jerso (11 intervenciones) el 21/02/2008 12:21:48
Si quiero poner mas opciones como podria ponerlo
global opciones
global opciones1

opc=get(handles.listbox1,'Value');

switch opc
case 1, disp(opciones{1}, opciones1{1});
otro_gui;
case 2, disp(opciones{2}, opciones1{2});
otro_gui2;
case 3, disp(opciones{3});
otro_gui3;
end

Seria correcto de esa forma
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Con listbox y pushbutton

Publicado por Kike (304 intervenciones) el 21/02/2008 19:08:24
En la función de apertura indicaré que deseo seleccionar más de una opción con el atributo Max, poniendo cualquier número mayor que 1:
handles.output = hObject;

global opciones

opciones={'Opcion 1','Opcion 2','Opcion 3'};

set(handles.listbox1,'String',opciones);
set(handles.listbox1,'Max',2);

% Update handles structure
guidata(hObject, handles);

En el callback del pushbutton vuelvo a declarar como global al arreglo. Y se invoca a otros GUI dependiendo de la opción seleccionada. Pero esta vez debo agregar decisiones if dentro del switch.

function pushbutton1_Callback(hObject, eventdata, handles)
% hObject handle to pushbutton1 (see GCBO)
% eventdata reserved - to be defined in a future version of MATLAB
% handles structure with handles and user data (see GUIDATA)

global opciones

opc=get(handles.listbox1,'Value');

%veo cuántas opciones han sido seleccionadas
elem_opc=length(opc);

switch elem_opc
case 1, % sólo una opcion
otro_gui;
disp('Seleccionó una sola opción');
fprintf('La opcion fue %s', opciones(opc));
case 2, % dos opciones;
disp('Ha seleccionado dos opciones');
if opc==[1,2]
otro_gui2;
elseif opc==[1,3]
otro_gui2b;
elseif opc==[2,3]
otro_gui2c;
end
fprintf('Las opciones fueron %s y %s', opciones(opc(1)),opciones(opc(2)));
case 3, % tres opciones;
disp('Seleccionó las tres opciones');
otro_gui3;
end
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Con listbox y pushbutton

Publicado por jerso (11 intervenciones) el 22/02/2008 16:22:12
Lo que yo queria es que tengo varios popupmenu y quiero poner condiciones pero para elegir cualquiera de los popup.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Con listbox y pushbutton

Publicado por jerso (11 intervenciones) el 25/02/2008 17:58:32
Lo que quiero es elegir uno de cada popupmenu que estan definidos no mas de uno de la primera opcion.

handles.output = hObject;
%-------------------------------
% modificado apartir de aqui

%-------------------------------

global escenarios
global opciones1
global opciones2
global opciones3

escenarios={'Elige escenario' 'blockcode' 'capacity' 'Ccsds' 'Cdma2000' 'Throuhgput' 'Umts' 'Uncoded' 'WiMaxLDPC' 'Convolutional' 'capacity FSK' 'FSK' 'hFskAWGNBICMCapacity' 'hFskAWGNCapacity' 'CPFSK' 'Hsdpa' 'Outage (solo simulaciones)'};
opciones4={'Elige...' 'linear-log-MAP algorithm' 'max-log-MAP algorithm' 'Constant-log-MAP algorithm' 'log-MAP' 'log-MAP, correction factor uses C function'};
opciones1={'Elige...' 'Uncoded' 'Coded' 'Capacity' 'Outage' 'Thoughput' 'Bwcapacity' 'minSNRvsB' 'Exit'};
opciones2={'Elige...' 'BPSK' 'QPSK' 'PSK' 'QAM' 'APSK' 'HEX' 'HSDPA'};
opciones3={'Elige...' 'AWGN' 'Rayleigh' 'block'};

set(handles.popupmenu1,'String',escenarios);
set(handles.popupmenu6,'String',opciones1);
set(handles.popupmenu3,'String',opciones2);
set(handles.popupmenu7,'String',opciones3);
set(handles.popupmenu8,'String',opciones4);

set(handles.popupmenu6,'Max',5);
set(handles.popupmenu3,'Max',5);
set(handles.popupmenu7,'Max',5);
set(handles.popupmenu8,'Max',5);
%---------------------------------------

% Update handles structure
guidata(hObject, handles);


Y del pushbutton
function pushbutton1_Callback(hObject, eventdata, handles)
% hObject handle to pushbutton1 (see GCBO)
% eventdata reserved - to be defined in a future version of MATLAB
% handles structure with handles and user data (see GUIDATA)
global escenarios
global opciones1
global opciones2
global opciones3

esc=get(handles.popupmenu1,'Value');
inf=get(handles.popupmenu1,'String'); %valor del popupmenu1
opc1=get(handles.popupmenu6,'Value');
opc2=get(handles.popupmenu3,'Value');
opc3=get(handles.popupmenu7,'Value');

%veo cuántas opciones han sido seleccionadas
elem_opc=length(esc);
elem_opc=length(opc1);
elem_opc=length(opc2);
elem_opc=length(opc3);
elem_opc=length(sim);
elem_opc=length(mod);
elem_opc=length(can);
switch elem_opc

case 1
if opc1==[2]

[sim_param, sim_state]= CmlPlot('BlockcodeScenarios',[1]); % Llamo a las funciones que ya están definidas
else opc1==[3]
[sim_param, sim_state]= CmlPlot('BlockcodeScenarios',[2]);
end

case 2
if esc==[2]

[sim_param, sim_state]= CmlPlot('CapacityScenarios',[1]) ;% llamo a las funcion que ya esta definida en CapacityScenarios
end

case 3, disp(opciones{3});
[sim_param, sim_state]= CmlPlot('CcsdsScenarios',[1]) ;% Llamo a las funciones que ya están definidas


Pero lo que quiero es elegir uno de cada popupmenu
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Con listbox y pushbutton

Publicado por Kike (304 intervenciones) el 26/02/2008 00:51:47
Veamos un ejemplo sencillo: un restaurante de comida rápida.

En la función de apertura del primer GUI:
global principal bebida postre
principal={'Hot dog','Hamburguesa','Pizza'};
bebida={'Coca cola','Pepsi','7 up','Fanta','Té','Café'}
postre={'Tres leches','Pie de manzana','Cheese cake','Flan'}

set(handles.popupmenu1,'String',principal);
set(handles.popupmenu2,'String',bebida);
set(handles.popupmenu3,'String',postre);

En el callback del pushbutton:
global Principal Bebida Postre
Principal=get(handles.popupmenu1,'Value');
Bebida=get(handles.popupmenu2,'Value');
Postre=get(handles.popupmenu3,'Value');
gui2; % llama al segundo GUI

%%%%%%%%%%%%%%%%%%%%%

El segundo GUI se encarga de facturar:
En el callback de algún push button:
global principal bebida postre Principal Bebida Postre

precio=0;

switch Principal
case 1, precio=0.75;
case 2, precio=1.25;
case 3, precio=1.15;
end

switch Bebida
case {1, 2, 3,4}
precio=precio+0.50;
case 5, precio=precio+0.55;
case 6, precio=precio+0.75;
end

switch Postre
case 1, precio=precio+1;
case 2, precio=precio+0.75;
case 3, precio=precio+0.80;
case 4, precio=precio+0.55;
end

fprintf('Su orden es: %s, %s, %s.',principal{Principal},bebida{Bebida},postre{Postre});
fprintf(' Total a pagar: %1.2f ', precio);
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Con listbox y pushbutton

Publicado por jerso (11 intervenciones) el 27/02/2008 16:43:15
Cuantos else o if puedo poner seguidos. Cuando le pongo mas de 3 no me funciona.

%-----------------------------------------------------
global opciones
global opciones1
global opciones2
global opciones3
global opciones4
global opciones6
global opciones5

opciones={ 'blockcode' 'capacity' 'Ccsds' 'Cdma2000' 'Throuhgput' 'Umts' 'Uncoded' 'WiMaxLDPC' 'Convolutional' 'DVBS2' 'capacity' 'FSK' 'CPFSK' 'Hsdpa' 'Outage (solo simulaciones)'};
opciones4={'Elige...' 'linear-log-MAP algorithm' 'max-log-MAP algorithm' 'Constant-log-MAP algorithm' 'log-MAP' 'log-MAP, correction factor uses C function'};
opciones3={'Elige...' 'AWGN' 'Rayleigh' 'block'};
opciones1={'Elige...' 'Uncoded' 'Coded' 'Capacity' 'Outage' 'Thoughput' 'Bwcapacity' 'minSNRvsB' 'Exit'};
opciones2={'Elige...' 'BPSK' 'QPSK' 'PSK' 'QAM' 'APSK' 'HEX' 'HSDPA'};
opciones5={'Elige...' 'RSC (recursivo sistematico convolucional;con turbo)' 'NSC (No sistematico convolucional)'};
opciones6={'Elige...' '101011100011' '101011'};
set(handles.popupmenu1,'String',opciones);
set(handles.popupmenu6,'String',opciones1);
set(handles.popupmenu3,'String',opciones2);
set(handles.popupmenu7,'String',opciones3);
set(handles.popupmenu8,'String',opciones4);
set(handles.popupmenu10,'String',opciones5);
set(handles.popupmenu11,'String',opciones6);

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

function pushbutton1_Callback(hObject, eventdata, handles)
% hObject handle to pushbutton1 (see GCBO)
% eventdata reserved - to be defined in a future version of MATLAB
% handles structure with handles and user data (see GUIDATA)
global opciones
global opciones1
global opciones2
global opciones3
global opciones4
global opciones5
global opciones6
opc=get(handles.popupmenu1,'Value');
inf=get(handles.popupmenu1,'String'); %valor del popupmenu1

opc1=get(handles.popupmenu6,'Value');
opc2=get(handles.popupmenu3,'Value');
opc3=get(handles.popupmenu7,'Value');
opc4=get(handles.popupmenu8,'Value');
opc5=get(handles.popupmenu10,'Value');
opc6=get(handles.popupmenu11,'Value');


switch opc
case 1
if opc1==[1]
else if opc2==[1]
else if opc3==[1]
else if opc4==[1]
else if opc5==[1] % QUE ERROR ESTOY HACIENDO
else opc6==[1] % POR QUE NO ME FUNCIONA

GUI1;
end
end
if opc1==[1] % DE ESTA FORMA SI ME FUNCIONA
else if opc2==[1] % CON MAS OPCIONES NO VA
else opc3==[1]

GUI2;
end
end

case 2
disp(opciones{2});
GUI3;
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Con listbox y pushbutton

Publicado por Kike (304 intervenciones) el 27/02/2008 17:30:52
Un IF puede ser anidado todas las veces que desee el usuario.

Si dentro del ELSE pongo otro IF, debo terminar ese IF con un END.
if condicion
codigo
else if condicion_2
codigo_2
end % fin de segundo if
end % fin de primer if

Esi puedo evitarlo con ELSEIF.
if condicion
codigo
elseif condicion_2
codigo_2
end % fin del primer if

Ahora analicemos este código:
switch opc
case 1 % si se escoge blockcode
if opc1==[1] % no hace nada, el usuario olvidó escoger una opción
else if opc2==[1] % no hace nada
else if opc3==[1] %no hace nada
else if opc4==[1] % no hace nada
else if opc5==[1] % no hace nada
else opc6==[1] % error de sintaxis. En español esto es "Entonces comparar opc6 con el número 1"
GUI1;
end
end

Si lo que se desea es hacer algo dependiendo de varias opciones al mismo tiempo, entonces se usa un operador AND entre las condiciones de IF, representado por doble ampersand &&. Ejemplo: si el usuario escoge blockcode, uncoded, BPSK, y AWGN, entonces que haga codigo_1, y si escoge Rayleigh en vez de AWGN entonces que haga codigo_2

switch opc
case 1,
if opc1==2 && opc2==2 && opc3==2
codigo_1;
elseif opc1==2 && opc2==2 && opc3==3
codigo_2;
else codigo_3; % otro codigo si no se cumplen las condiciones anteriores
end % fin de if
end % fin de switch
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Con listbox y pushbutton

Publicado por jerso (11 intervenciones) el 28/02/2008 17:36:20
Como puedo desahibilitar un popupmenu en la programacion pero solo para cuando quiera no utilizarlo.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Con listbox y pushbutton

Publicado por Jerso (11 intervenciones) el 05/03/2008 19:58:43
Se podria poner de otra forma lo de elegir todas la cosas que se kiera.
switch opc
case 1,
if opc1==2 && opc2==2 && opc3==2
codigo_1;
elseif opc1==2 && opc2==2 && opc3==3
codigo_2;
else codigo_3; % otro codigo si no se cumplen las condiciones anteriores
end % fin de if
end % fin de switch

No se pork me da este error
?? Error using ==> ==
Function '==' is not defined for values of class 'cell'.

Error in ==> C:Documents and SettingsLourdes5EscritorioNuevo proyectoCodesMatlabcmlinicio.m (pushbutton1_Callback)
On line 437 ==> if modulacion2=={1} && mod_order2=={1} && mapping1=={1} && max_trials2=={1} && save_rate2=={1} && canal2=={1}

Error in ==> C:MATLAB6p5 oolboxmatlabuitoolsgui_mainfcn.m
On line 66 ==> feval(varargin{:});

Error in ==> C:Documents and SettingsLourdes5EscritorioNuevo proyectoCodesMatlabcmlinicio.m
On line 43 ==> gui_mainfcn(gui_State, varargin{:});

??? Error while evaluating uicontrol Callback.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar