2012-05-22 3 views
0

matlab에 Simon 게임 버전을 만들려고합니다. 버튼을 누른 후에 원래 색상으로 돌아가는 버튼을 만들고 싶지만 버튼은 새로운 색상으로 유지됩니다. 내가 사용하는 코드는 다음과 같습니다 당신이 그것을 실행하는 경우버튼 색상을 원래 값으로 다시 변경하십시오.

clc, clf, clear 
h1=figure(1); 
button1=uicontrol(h1, 'Style','Pushbutton', 'Units','Normalized','Position',... 
[0.1 0.1 0.2 0.2],'Backgroundcolor', [1 0 0],... 
'Callback',['value1=get(button1,''Value''); if value1==1',... 
'set(button1,''Backgroundcolor'',[0 1 0]); else ,',... 
'set(button1, ''BackgroundColor'',''r''), end,value2=get(button1,''Value'')']); 

당신은 내가 자동으로 빨간색으로 반환하기 위해 무엇을 할 수 있으며, 색상이 녹색으로 유지 알 수 있습니까?

답변

2

코드의 주된 문제점은 Value 속성이 button1인지 확인하는 것 뿐이지 만 이후의 프레스에서는 변경되지 않습니다. 따라서 Valuebutton1 인 경우 항상 0으로 평가되므로 단추가 색상을 변경하지 않습니다. 내가 여기에 무슨 짓을

clc, clf, clear 
h1 = figure(1); 
button1_state = 1; 
button1_callback = ... 
    ['if (button1_state == 1), set(button1, ''Backgroundcolor'', ''g''),' ... 
    'else set(button1, ''BackgroundColor'', ''r''), end, ' ... 
    'button1_state = ~button1_state;']; 
button1 = uicontrol(h1, 'Style', 'Pushbutton', 'Units', 'Normalized', ... 
    'Position', [0.1 0.1 0.2 0.2], 'Backgroundcolor', 'r', ... 
    'Callback', button1_callback); 

는 (녹색 빨간색 1과 0) 변수 button1의 현재 "상태"를 유지 button1_state을 만들 수 있습니다 :

다음 작업 코드

당신이 원하는 것을 할 것 같다. 콜백 작업에서 현재 상태에 따라 단추의 배경색을 변경 한 다음 상태를 바꿉니다.

희망이 있습니다. 내가 가독성을 이유로 문자열 button1_callback에서 개별적으로 콜백 작업을 넣어

P.S
알 수 있습니다. 사실은 이것으로 전개 것 :

if (button1_state == 1) 
    set(button1, 'Backgroundcolor', 'g') 
else 
    set(button1, 'BackgroundColor', 'r') 
end 
button1_state = ~button1_state; 
+1

고마워요, 당신의 코드를 내가 추가 할 수 있습니다 생각하고있어 일부 WindowButtonDownFcn 및 WindowButtonUpFcn 그래서 그것을 자동으로 다시 누르지 않고 색상을 변경 버튼을 놓을 때. – octa

관련 문제