2012-03-02 4 views
6

저는 MATLAB GUI를 사용하여 재생, 일시 정지 및 슬라이더와 같은 버튼이있는 간단한 실시간 데이터 뷰어를 만들고 있습니다. 사용자가 재생 슬라이더를 누른 후 매 단계마다 업데이트해야합니다 (초당 50 샘플). 이 기능은 수동으로 움직이는 슬라이더를 방해합니다 (두 번째 1/50로 이동해야 함). 지금은 슬라이더를 50 초마다 업데이트하도록 설정 했으므로 (매초마다 한 번씩) 슬라이더를 길게 누르지 않으면 업데이트가 필요하지 않습니다.Buttondownfcn이 슬라이더에서 작동하지 않습니다.

슬라이더 속성 사용이 설정되면 Buttownownfcn이 왼쪽 클릭에 대해 작동하지 않는다는 것이 문제입니다. Buttondownfcn을 사용하면 업데이트를 잠그고 문제를 완전히 해결할 수 있습니다. 이 주위에 어떤 방법이 있습니까?

% --- Executes on slider movement. 
function slider_Callback(hObject, eventdata, handles) 
disp('Slider movement') 

% --- Executes on button down. 
function slider_ButtonDownFcn(hObject, eventdata, handles) 
disp('Button down') 
+3

몇 가지 간단한 예제 코드를 보여줄 수 있습니까? – tim

+1

이 동작을 시뮬레이트하려면 MATLAB GUI를 시작하고 슬라이더를 추가하십시오. 콜백 및 ButtonDownFcn을 콜백으로 추가하고 disp를 사용하는 것처럼 인쇄 된 메시지를 추가하십시오. 그런 다음 속성 사용 (켜짐/꺼짐)과 무슨 일이 일어나는지를 확인하십시오. –

답변

1

당신은 당신이 당신의 재생 버튼을 누를 때 off 또는 inactive에 슬라이더의 Enable 속성을 설정하고 플레이를 중단하고 다시 onEnable을 설정하는 ButtonDownFcn 기능을 사용하여 인터럽트 플레이를 얻을 수 있습니다.

function playcallback(toggle_button, ~, slider_) 
set(slider_, 'Enable', 'inactive'); %slider is disabled 
while get(toggle_button, 'Value') %Value is used as flag for playing 
    current_value = get(slider_, 'Value'); 
    set(slider_, 'Value', rem(current_value + 0.01, 1)); %shift slider (looping) 
    pause(1/50); 
end 
set(slider_, 'Enable', 'on'); %done playing, turn slider back on 
end 

그리고 다음 내 재생 버튼으로 togglebutton은 (당신이 어딘가에 액세스 할 수있는 부울 플래그를 저장할 수있는 다른 제어 위젯만큼 작동합니다) 사용

, 나는 단추의 Callback으로 다음 사용 당신은 다음과 같이 이러한 콜백을 등록 할 수 있습니다

function stopslide(~, ~, toggle_button) 
%play flag off: in playcallback, the while loop stops, 
%the slider is enabled and the playcallback function returns 
set(toggle_button, 'Value', 0); 
end 

:

,448 슬라이더에 대한 ButtonDownFcn

경고 : 이와 비슷한 방식으로 슬라이더/재생 버튼과 상호 작용하는 다른 위젯을 추가하기 시작하면 경쟁 조건을 도입 할 확률이 높아집니다.

+0

나는 그것을 할 수 있다는 것을 알지만 데이터가 재생되는 동안 시간을 ​​변경할 수 없으며 매우 사용자 친화적이지 않다. –

+0

Ok. 나는 당신이 GUI에서 어떻게 슬라이더를 사용하는지 완전히 이해하지 못한다고 생각합니다. 에뮬레이트하고 싶은 예제 애플리케이션이 있습니까? 지금까지 나는 그것을 다음과 같은 방식으로 이해했다 : 당신은 외부 소스 (초당 50 회)로부터 데이터를 얻는다; N 개의 샘플에 대한 데이터 버퍼를 유지합니다. 슬라이더는 표시 할 샘플을 선택하는 데 사용됩니다. 일시 중지하지 않는 한 디스플레이는 항상 1/50 초마다 업데이트됩니다. – AE426082

관련 문제