2011-01-07 67 views
5

Tôi không phải là lập trình viên MATLAB nhưng tôi cần tạo một giao diện bằng MATLAB! qusetion này nên rất dễ dàng cho các lập trình matlab :)Tôi làm cách nào để có được giá trị nút radio đã chọn?

Tôi có một giao diện, trong đó có nút radio bảng nhóm "OperationPanel" , 4 radiobutton bên trong nó mà tên là "addBtn, subBtn, divBtn, mulBtn" và tôi có nút lệnh, tôi muốn khi tôi nhấp vào nút để nhận giá trị của radioButton đã chọn

Tôi nên sử dụng dấu phẩy nào? Tôi google nó và thấy rằng nếu tôi thực hiện

get(handles.NewValue,'Tag'); 

Tôi mệt mỏi nhưng nó không hoạt động !! Tôi có thể hava một số giúp đỡ!

Trả lời

12

Dưới đây là một ví dụ nhanh để minh họa làm thế nào để có được giá trị của một thành phần nhóm radio button:

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

Rõ ràng bạn có thể bổ sung thêm kiểm chứng thực trên số đầu vào và vân vân ...

+0

câu trả lời tuyệt vời nhưng tôi không quen với lập trình GUI trong MATLAB, tôi chỉ cần kéo và thả vào các công cụ, tôi thêm bảng radioButton Group và thêm tất cả rbuttons indide, nhưng tôi không biết cách làm cho tất cả chúng thuộc về cùng một nhóm. – palAlaa

+0

@Alaa: Khi bạn tạo các nút vô tuyến bên trong GUIDE, hãy đảm bảo thả chúng bên trong bảng điều khiển – Amro

+0

Tôi đã làm, và nó hoạt động ngay bây giờ, nhưng tôi thực hiện hành động trên các nút radio không phải trên nút nhấn như @gary comtois cho tôi thấy, Tôi cố gắng gọi phương thức hành động của các nút radio bên trong chức năng gọi lại của nút ấn, nhưng nó không hoạt động, bạn có gợi ý gì không? – palAlaa

2

Bạn đã đặt handles thành hOjbect? Cũng đừng quên cập nhật tay cầm sau khi xử lý sự kiện nút radio. Bạn đã xem cái này Matlab GUI Tutorial chưa? Cuộn xuống Phần 3 bước 5 để xem mã ví dụ sau đây cho ba nút 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, vâng tôi nhìn vào các hướng dẫn Matlab GUI, nhưng fucncion này "fontSelect_buttongroup_SelectionChangeFcn()" là hành động của buttongroup và tôi muốn thực hiện thao tác trên nút lệnh. – palAlaa

2

Nếu bạn sử dụng cú pháp này bên dưới, bạn sẽ nhận được một er ROR:

get(handles.NewValue,'Tag') 

gì bạn nên sử dụng là

get(eventdata.NewValue, 'Tag') 

Vấn đề là khi bạn đang nhìn vào SelectionChangeFcn - những gì cơ bản bạn đang tìm kiếm là sự kiện mới mà đã bị sa thải là gì và giá trị mới được liên kết với sự kiện đó là gì. Bạn không phải sử dụng 'Thẻ' - thậm chí bạn có thể sử dụng 'Chuỗi' hoặc các thuộc tính khác có thể phù hợp trong ngữ cảnh của bạn.

0

mã trên hoạt động trên có thể dự án ..

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 
Các vấn đề liên quan