2012-06-11 2 views
1

OO GUI 프로그램을 작성 중이며 set() 함수를 사용하여 GUI 요소 속성을 변경하는 데 문제가 있습니다. 나는 버튼을 끄고 켜는 속성을 변경하려고하고있다. 아래에서 같은 문제를 보여주는 요약 된 코드를 첨부했습니다. matlab에서 클래스를 처리하는 방식 등은 오히려 이상하게 느껴 지므로 문제는 단순히 시스템에 대한 오해로 인한 것일 수 있습니다. 어쨌든 handle AD.buttonExit에서 set() 함수를 사용하려고 시도하면 initUI() 함수에서 명령을 실행할 때 예상대로 작동합니다. 다른 기능에서 동일한 작업을 시도하면 실패합니다. AD의 컨텐 트를 인쇄하여 스택을 검사했습니다. initUI 함수에서는 명확하게 buttonExit에 대한 핸들 값을 표시하지만 생성자 함수 (또는 다른 클래스 멤버 함수)에서는 그렇지 않습니다. 초보적인 실수를하는 것처럼 느껴지지만 나는 그것을 보지 못합니다. 누군가가 나를 도와 줄 수 있기를 바랍니다. GUI에서 클래스 처리

- (명확성을 위해 요약 된) rfhigler

코드 :

classdef test 

    properties 
     AppUI; 
     buttonExit; 
    end 

    methods 
     function AD = test() 
      %draws UI 
      AD.initUI(); 
      set(AD.buttonExit, 'Enable', 'on') 
      AD.test2() 
     end 
     function initUI(AD) 
      AD.AppUI = figure('Visible','off','Position',[520,321,695,482], 'MenuBar', 'none', 'Name', '3D Particle Tracking',... 
       'NumberTitle', 'off', 'Resize', 'off', 'Color', [0.94,0.94,0.94]); 
      AD.buttonExit = uicontrol('Enable', 'off', 'Style', 'pushbutton', 'Visible', 'on', 'Position', [35,29,181,31], 'String', 'Exit'); 
      set(AD.AppUI, 'Visible', 'on'); 
      %1 set(AD.buttonExit, 'Enable', 'on') 
     end 
     function test2(AD) 
      set(AD.buttonExit, 'Enable', 'on') 
     end 
    end 
end 
+0

AD = AD.initUI();에 어디 이상한 행동 발생합니까? btw. 첫 번째 추측으로 클래스는'handle' 클래스를 상속받습니다. – bdecaf

답변

1

의 MATLAB 클래스는 조금 홀수 : 기본적으로, 그들은 대신 "핸들"클래스의 "값"클래스입니다. 그 차이점은 here입니다.

즉, 클래스를 handle 클래스로 확장하면 다른 OO 언어에서 기대했던대로 동작합니다. 당신이 initUI에서 AD를 업데이트하기 때문에 그냥 당신이 출력 업데이트 된 변수를해야합니다,

classdef test < handle 
0

에 클래스 정의 라인을 변경합니다. 시험에서

function initUI(AD), function AD = initUI(AD)

과() 함수 : 그래서, 당신은 다음 줄을 변경해야 당신이 샘플 코드를 추가 할 수

AD.initUI();