2011-01-07 39 views
5

No soy programador de matlab pero necesito crear una interfaz usando matlab! Este qusetion debe ser muy fácil para los programadores de MATLAB :)¿cómo puedo obtener el valor seleccionado del botón de opción?

tengo una interfaz que contiene el botón de radio panel de grupo "OperationPanel" , 4 botones de radio en su interior, que son los nombres "addBtn, subBtn, divBtn, mulBtn" y tengo botón de comando, quiero cuando hago clic sobre el botón para obtener el valor del radioButton seleccionado

¿Cuál es el commad que debo usar? I Google y encontré que si hago

get(handles.NewValue,'Tag'); 

me cansado, pero no funciona !! ¿Puedo tener algo de ayuda?

Respuesta

12

Aquí está un ejemplo rápido para ilustrar cómo obtener el valor de un grupo de componente botón de radio:

function simpleGUI 
    hFig = figure('Visible','off', 'Menu','none', 'Name','Calculator', 'Resize','off', 'Position',[100 100 350 200]); 
    movegui(hFig,'center')   %# Move the GUI to the center of the screen 

    hBtnGrp = uibuttongroup('Position',[0 0 0.3 1], 'Units','Normalized'); 
    uicontrol('Style','Radio', 'Parent',hBtnGrp, 'HandleVisibility','off', 'Position',[15 150 70 30], 'String','Add', 'Tag','+') 
    uicontrol('Style','Radio', 'Parent',hBtnGrp, 'HandleVisibility','off', 'Position',[15 120 70 30], 'String','Subtract', 'Tag','-') 
    uicontrol('Style','Radio', 'Parent',hBtnGrp, 'HandleVisibility','off', 'Position',[15 90 70 30], 'String','Multiply', 'Tag','*') 
    uicontrol('Style','Radio', 'Parent',hBtnGrp, 'HandleVisibility','off', 'Position',[15 60 70 30], 'String','Divide', 'Tag','/') 

    uicontrol('Style','pushbutton', 'String','Compute', 'Position',[200 50 60 25], 'Callback',{@button_callback}) 

    hEdit1 = uicontrol('Style','edit', 'Position',[150 150 60 20], 'String','10'); 
    hEdit2 = uicontrol('Style','edit', 'Position',[250 150 60 20], 'String','20'); 
    hEdit3 = uicontrol('Style','edit', 'Position',[200 80 60 20], 'String',''); 

    set(hFig, 'Visible','on')  %# Make the GUI visible 

    %# callback function 
    function button_callback(src,ev) 
     v1 = str2double(get(hEdit1, 'String')); 
     v2 = str2double(get(hEdit2, 'String')); 
     switch get(get(hBtnGrp,'SelectedObject'),'Tag') 
      case '+', res = v1 + v2; 
      case '-', res = v1 - v2; 
      case '*', res = v1 * v2; 
      case '/', res = v1/v2; 
      otherwise, res = ''; 
     end 
     set(hEdit3, 'String',res) 
    end 
end 

screenshot

Obviamente se podría añadir más validaciones sobre los números de entrada y así sucesivamente ...

+0

buena respuesta, pero no estoy familiarizado con la programación de GUI en matlab, solo hago arrastrar y soltar a las herramientas, agrego el panel de RadioButton Group y agrego todos los botones de r indt, pero no sabía cómo hacer que todos ellos pertenezcan al Mismo grupo. – palAlaa

+0

@Alaa: Cuando crea los botones de radio dentro de GUIDE, asegúrese de colocarlos dentro del panel – Amro

+0

Lo hice, y funciona ahora, pero hago la acción en los botones de opción no en el botón cuando @gary comtois me muestra, Intento llamar al método de acción de los botones de opción dentro de la función de devolución de llamada del botón, pero no funciona, ¿tiene alguna sugerencia? – palAlaa

2

¿Ha establecido handles en el hOjbect? Además, no olvide actualizar el identificador después de procesar el evento del botón de opción. ¿Has mirado esto Matlab GUI Tutorial? Desplácese hacia abajo hasta la parte 3 el paso 5 para ver el siguiente código de ejemplo para tres botones de radio:

function fontSelect_buttongroup_SelectionChangeFcn(hObject, eventdata) 

%retrieve GUI data, i.e. the handles structure 
handles = guidata(hObject); 

switch get(eventdata.NewValue,'Tag') % Get Tag of selected object 
    case 'fontsize08_radiobutton' 
     %execute this code when fontsize08_radiobutton is selected 
     set(handles.display_staticText,'FontSize',8); 

    case 'fontsize12_radiobutton' 
     %execute this code when fontsize12_radiobutton is selected 
     set(handles.display_staticText,'FontSize',12); 

    case 'fontsize16_radiobutton' 
     %execute this code when fontsize16_radiobutton is selected 
     set(handles.display_staticText,'FontSize',16); 
    otherwise 
     % Code for when there is no match. 

end 
%updates the handles structure 
guidata(hObject, handles); 
+0

@gray Comtois, sí Miré a los tutoriales Matlab GUI, pero esto fucncion "fontSelect_buttongroup_SelectionChangeFcn()" es la acción de la ButtonGroup y quiero hacer la acción en el botón de comando. – palAlaa

2

Si utiliza esta sintaxis a continuación obtendrá un ampli ROR:

get(handles.NewValue,'Tag') 

Lo que se debe utilizar es

get(eventdata.NewValue, 'Tag') 

El punto es el que usted está buscando en la SelectionChangeFcn - lo que busca esencialmente es lo que es el nuevo evento que se ha disparado y ¿Cuál es el nuevo valor asociado con ese evento? No tiene que usar 'Etiqueta' - incluso puede usar 'Cadena' u otras propiedades que puedan ser apropiadas en su contexto.

0

el código anterior funciona en .. puede proyectar

function pushbutton_startProcess_Callback(hObject, eventdata, handles) 

    set(handles.edit1,'String',get(handles.edit2,'String')); 

      switch get(get(handles.uipanel3,'SelectedObject'),'Tag') 
       case 'wavelet_method', set(handles.edit1,'String','wavelet_method'); 
       case 'glcm_method', set(handles.edit1,'String','glcm_method'); 
       case 'ewd_method', set(handles.edit1,'String','ewd_method'); 
       case 'wavelet_gclm_method',  set(handles.edit1,'String','wavelet_glcm_method'); 
       otherwise, set(handles.edit1,'String','boş'); 
      end 
Cuestiones relacionadas