2012-10-22 8 views
3

체크 마크에 따라 속성을 업데이트하는 SciLab에서 GUI를 디자인하려고합니다. 예를 들어, 체크 박스는 콜백 중에 여러 텍스트 상자의 백 워드를 활성화하고 변경할 수 있습니다. 푸시 버튼을 사용하려면 특정 수의 확인란을 선택해야 할 수 있습니다.SciLab 확인란 UIControl 값이 상태와 함께 변경되지 않습니까?

제 문제는 콜백 중에 확인란 상태에 따라 명령을 실행하기위한 흐름 제어 문을 개발할 수없는 것입니다.

handles.chkS11En=uicontrol(f,'unit','normalized','BackgroundColor',[0.8,0.8,0.8],'Enable','on','FontAngle','normal','FontName','helvetica','FontSize',[12],'FontUnits','points','FontWeight','normal','ForegroundColor',[0,0,0],'HorizontalAlignment','center','ListboxTop',[],'Max',[1],'Min',[0],'Position',[0.02140625,0.791119360625398,0.0803125,0.0369667],'Relief','flat','SliderStep',[0.01,0.1],'String','S11','Style','checkbox','Value',[0],'VerticalAlignment','middle','Visible','on','Tag','chkS11En','Callback','chkS11En_callback(handles)') 

내가 확인란을 선택하면 실행 내 콜백은 이것이다 : 나의 현재 UIControl 요소는 다음과 같습니다

cS11En = findobj('tag', 'chkS11En');  // checkbox option 
tS11MagUpperBound = findobj('tag', 'txtS11MagUpperBound'); //edit box that is controlled 

mprintf("%d\n",cS11En.Value); 
if cS11En.Value == [1] then 
    mprintf("Checked = on \n"); 
    set(tS11MagUpperBound,'BackgroundColor',[1,1,1]); 
    set(tS11MagUpperBound,"Enable",'on'); 
    set(cS11Save,"Enable",'on'); 
elseif cS11En.Value == [0] then 
    mprintf("Checked = off \n"); 
    set(tS11MagUpperBound,'BackgroundColor',[0.8,0.8,0.8]); 
    set(tS11MagUpperBound,'Enable','off'); 
    set(cS11Save,"Enable",'off'); 
end 
이 코드의 문제는 두 번째 경로가 (값 것 같다

= 1) 내가 계속 체크 박스를 토글하는 경우에도 절대 실행되지 않는 것 같습니다. 나는 이렇게 출력을 얻는다 :

0 
Checked = off 
0 
Checked = off 
0 
Checked = off 
0 
Checked = off 

내가 요소를 점검하는 것을 다시 불러 오기 위해 잘못하고있는 것이 있는가? 두 경로를 모두 실행할 수 있기를 원하지만 checkbox 요소에서 값 1을 얻지 못하는 것 같습니다. 누구든지 이것에 대한 해결책을 가지고 있습니까? 감사! 사람이 궁금해하고 구글이나 뭐 통해이 발견되면

답변

1

이 내가 그것을 해결하는 방법입니다

는 폼이 닫힐 때 SciLab 때로는 모든 UI 변수 명확하지 않는 것으로 나타났다과 스크립트입니다 달리는.

해결 방법은 모든 변수를 지우고 모든 양식을 닫은 다음 변수를 초기화하는 프로그램 상단에 몇 줄을 추가하는 것입니다.

기본적으로

이 추가 :

// ///////////// 
// Lemon Pledge 
// ///////////// 
mprintf("\n!!!!!!!!!!!!!!!!!!!\nCLEARING ALL VARIABLES\n!!!!!!!!!!!!!!!!!!!\n") 
xdel(winsid()); 
clear; 
clearglobal;