2013-01-15 3 views
1

GUIDE로 GUI를 만들었습니다. 한 그룹에 3 개의 라디오 버튼이 있습니다. 프로그램을 실행하고 일부 계산을 위해 값을 입력 한 후 압력, 온도, 상승/끌기 힘 (어떤 라디오 버튼을 누르느냐에 따라 다름)에 대한 플롯을 얻습니다. 프로그램의 구조는 다음과 같습니다.다른 기능에서 선택된 라디오 버튼 사용

메인 코드 (GUI) : 은 "계산"버튼을 누른 후 Apollo라는 함수에 값을 전달합니다.

아폴로 코드 : 에는 압력, 온도 및 리프트/끌기 힘의 계산에 필요한 값을 계산하는 하위 기능이 포함되어 있습니다. 마지막 하위 함수는 plot_data입니다. 이 함수는 우주선의 모양을 한 그림에 그려 넣고 해당 라디오 버튼을 선택하면 다른 그림에 압력, 온도, 상승/끌기 힘을 그립니다.

문제점 - GUI 프로그래밍에 익숙하지 않습니다. 어떤 radiobutton이 GUI에서 선택되었는지와 내 plot_data 함수의 스위치로 일종의 로직을 사용하는 방법을 결정하는 데 문제가 있습니다. select case가 plot_data 함수에 있어야합니다.

도움을 주시면 감사하겠습니다.

답변

0

튜토리얼 this을의 당신의 라디오 버튼의 핸들이 rb1rb2을하고 그들이 handles 구조에 저장되어 있다고 가정 해 봅시다. 그런 다음 'Value' 속성을 사용하여 선택했는지 확인할 수 있습니다.

function apollo(hObj, eventdata, handles) 
    if get(handles.hrb1, 'Value') 
     % do stuff 
    elseif get(handles.hrb2, 'Value') 
     % do other stuff 
    end 
end 

업데이트 : OP의 의견에 응답에 대한 SelectionChangeFcn :

은 당신이의 Visible 속성을 변경 한 후 처음에 그들 모두를 그릴 수 많은 데이터가없는 경우 줄거리. 당신은 많은 데이터를이있는 경우

function cbSelectionChange(hObj, eventdata, handles) 
    rbTag = get(eventData.NewValue, 'Tag'); 
    switch rbTag 
     case 'rb1' 
      set(handles.plotHandle1, 'Visible', 'On'); 
      set(handles.plotHandle2, 'Visible', 'Off'); 
     case 'rb2' 
      set(handles.plotHandle2, 'Visible', 'On'); 
      set(handles.plotHandle1, 'Visible', 'Off'); 
    end 
end 

당신은 SelectionChangeFcn 콜백에서 plot_data 함수를 호출 할 수 있습니다.

function cbSelectionChange(hObj, eventdata, handles) 
    rbTag = get(eventData.NewValue, 'Tag'); 
    switch rbTag 
     case 'rb1' 
      plot_data(yourArguments1); 
     case 'rb2' 
      plot_data(yourArguments2); 
    end 
end 

코드를 수정하지 않으면 성능에 영향을 미치지 않습니다. 더그 선체 here 말한다 :

MATLAB 일반적으로 사용자가 입력 인수를 수정하지 않는 한 또는 때까지 함수 작업 공간 내부의 입력 인수의 복사를 방지하기 위해 "복사 (copy-on-write)"라는 시스템을 사용합니다. 입력 인수를 수정하지 않으면 MATLAB은 복사본을 만들지 않습니다.

+0

감사합니다. HebeleHododo, 완벽하게 작동했습니다. 그러나 이제 프로그램을 실행하면서 제대로 설정하지 않았다는 것을 깨달았습니다. 지금해야 할 일은 코드를 변경하여 라디오 버튼을 클릭 할 때마다 계산 버튼을 항상 클릭하는 대신 적절한 플롯으로 변경합니다. 아마 radiobutton 그룹에 SelectionChangeFnc 콜백을 사용하는 것이 관련 될 것입니다. plot_data.m의 데이터 세트를 Apollo.m을 통해 기본 GUI에 전달하고 싶지는 않습니다. 모든 플롯을 플로팅 한 다음 메인 GUI에서 켜고 끌 수있는 방법이 있습니까? – roldy

+0

@roldy 답변을 업데이트했습니다. 나는'Visible' 속성을 변경하는 것이 당신이 원하는 것이라고 생각합니다. – HebeleHododo

0
  • 사용자가 라디오 버튼을 클릭 한 후 작업을 수행하려면 객체의 "콜백"속성을 편집해야합니다.

  • 코드에서 라디오 버튼의 상태를 테스트하려면 "값"속성을 확인해야합니다. 그것은 선택된 버튼을위한 것이고 그렇지 않으면 0이 될 것입니다.

관련 문제