이 페이지의 최신 내용은 아직 번역되지 않았습니다. 최신 내용은 영문으로 볼 수 있습니다.
UI 구성요소와 그래픽스 구성요소에는 특정 콜백 함수에 연결할 수 있는 속성이 있습니다. 각 속성은 특정 사용자 동작에 해당합니다. 예를 들어, uicontrol에는 Callback
속성이 있습니다. 이 속성의 값을 콜백 함수에 대한 핸들, 익명 함수 또는 MATLAB® 표현식이 포함된 문자형 벡터로 설정할 수 있습니다. 이 속성을 설정하면 사용자가 uicontrol과 상호 작용할 때 앱이 응답하게 됩니다. Callback
속성에 값을 지정하지 않으면 사용자가 uicontrol과 상호 작용할 때 어떤 동작도 일어나지 않습니다.
다음 표에는 사용할 수 있는 콜백 속성, 콜백 함수를 트리거하는 사용자 동작, 콜백 속성을 사용하는 가장 일반적인 UI 구성요소와 그래픽스 구성요소가 나열되어 있습니다.
콜백 속성 | 사용자 동작 | 이 속성을 사용하는 구성요소 |
---|---|---|
ButtonDownFcn | 포인터가 구성요소 또는 Figure 위에 있을 때 최종 사용자가 마우스 버튼을 누릅니다. | |
Callback | 최종 사용자가 구성요소를 트리거합니다. 예를 들어, 메뉴 항목 선택, 슬라이더 이동, 누름 버튼 누르기 등이 이에 해당합니다. | |
CellEditCallback | 셀을 편집할 수 있는 테이블에서 최종 사용자가 값을 편집합니다. | |
CellSelectionCallback | 최종 사용자가 테이블에서 셀을 선택합니다. | |
ClickedCallback | 최종 사용자가 푸시 툴 또는 토글 툴을 마우스 왼쪽 버튼으로 클릭합니다. | |
CloseRequestFcn | Figure가 닫힙니다. | |
CreateFcn | MATLAB이 객체를 만들면 이 객체가 표시되기 전에 콜백이 실행됩니다. |
|
DeleteFcn | MATLAB이 Figure를 삭제하기 직전에 콜백이 실행됩니다. |
|
KeyPressFcn | 포인터가 객체 위에 있을 때 최종 사용자가 키보드 키를 누릅니다. | |
| 포인터가 객체 위에 있을 때 최종 사용자가 키보드 키를 놓습니다. | |
OffCallback | 토글 툴의 | |
OnCallback | 토글 툴의 | |
| 최종 사용자가 | |
SelectionChangedFcn | 최종 사용자가 버튼 그룹 내에서 여러 라디오 버튼 또는 토글 버튼을 선택합니다. | |
WindowButtonDownFcn | 포인터가 Figure 창에 있을 때 최종 사용자가 마우스 버튼을 누릅니다. | |
WindowButtonMotionFcn | 최종 사용자가 Figure 창 내에서 포인터를 이동합니다. | |
WindowButtonUpFcn | 최종 사용자가 마우스 버튼을 놓습니다. | |
WindowKeyPressFcn | 포인터가 Figure 또는 Figure의 자식 객체 위에 있을 때 최종 사용자가 키를 누릅니다. | |
WindowKeyReleaseFcn | 포인터가 Figure 또는 Figure의 자식 객체 위에 있을 때 최종 사용자가 키를 놓습니다. | |
| 포인터가 Figure 위에 있을 때 최종 사용자가 마우스 휠을 돌립니다. |
콜백 함수와 UI 구성요소를 연결하려면 구성요소의 콜백 속성값 중 하나를 콜백 함수에 대한 참조로 설정하십시오. 이는 일반적으로 구성요소를 정의할 때 사용하는 방법으로, 코드의 어느 위치에서나 콜백 속성값을 변경할 수 있습니다.
다음 방법 중 하나를 사용하여 콜백 속성값을 지정합니다.
셀형 배열 지정하기. 이 셀형 배열에는 함수 핸들이 첫 번째 요소로 포함되고 뒤이어 함수에서 사용할 입력 인수가 포함됩니다.
함수 핸들을 사용하면 함수를 변수로 나타낼 수 있습니다. 함수는 앱 코드가 포함된 파일에 있는 로컬 함수 또는 중첩 함수여야 합니다. 또는 MATLAB 경로에 있는 별도의 파일 내 함수일 수 있습니다.
함수 핸들을 만들려면 함수 이름 앞에 @
연산자를 지정하십시오. 예를 들어, 이 uicontrol
명령은 Callback
속성을 함수 pushbutton_callback
에 대한 핸들로 지정합니다.
b = uicontrol('Style','pushbutton','Callback',@pushbutton_callback);
다음은 pushbutton_callback
에 대한 함수 정의입니다.
function pushbutton_callback(src,event) display('Button pressed'); end
콜백 속성 이름 | 구성요소 |
---|---|
WindowKeyPressFcn WindowKeyReleaseFcn WindowScrollWheel | figure |
KeyPressFcn | figure , uicontrol , uitable |
KeyReleaseFcn | figure , uicontrol , uitable |
SelectionChangedFcn | uibuttongroup |
CellEditCallback CellSelectionCallback | uitable |
콜백을 함수 핸들로 지정할 때 좋은 점은 구성요소에 콜백을 할당하면 MATLAB이 함수에서 구문 오류와 누락된 종속성을 확인한다는 것입니다. 콜백 함수에 문제가 있으면 MATLAB은 사용자가 콜백을 트리거하기를 기다리지 않고 즉시 오류를 반환합니다. 이 동작은 최종 사용자가 문제를 겪기 전에 코드에서 미리 문제를 발견할 수 있도록 도와줍니다.
셀형 배열을 사용하여 함수에서 사용할 추가 입력 인수를 받는 콜백 함수를 지정합니다. 셀형 배열의 첫 번째 요소는 함수 핸들입니다. 셀형 배열의 다른 요소들은 사용할 추가 입력 인수로, 쉼표로 구분됩니다. 지정하는 함수는 함수 핸들 지정하기에서 설명한 것과 동일한 2개의 입력 인수를 정의해야 합니다. 하지만 함수 선언에서 처음 2개의 인수 뒤에 입력값을 추가로 정의할 수 있습니다.
다음 uicontrol
명령은 누름 버튼을 만들고 Callback
속성을 셀형 배열로 지정합니다. 이 경우, 함수 이름은 pushbutton_callback
이고 추가 입력 인수의 값은 5
입니다.
b = uicontrol('Style','pushbutton','Callback',{@pushbutton_callback,5});
다음은 pushbutton_callback
에 대한 함수 정의입니다.
function pushbutton_callback(src,event,x) display(x); end
함수 핸들로 지정된 콜백처럼, 구성요소에 콜백을 할당하면 MATLAB은 셀형 배열로 지정된 콜백에서 구문 오류와 누락된 종속성을 확인합니다. 콜백 함수에 문제가 있으면 MATLAB은 사용자가 콜백을 트리거하기를 기다리지 않고 즉시 오류를 반환합니다. 이 동작은 최종 사용자가 문제를 겪기 전에 코드에서 미리 문제를 발견할 수 있도록 도와줍니다.
UI 구성요소가 함수 핸들과 셀형 배열에 필요한 2개의 인수를 지원하지 않는 함수를 실행하도록 하려면 익명 함수를 지정하십시오. 예를 들어, 다음 uicontrol
명령은 누름 버튼을 만들고 Callback
속성을 익명 함수로 지정합니다. 이 경우, 함수 이름은 myfun
이고 함수 선언은 하나의 입력 인수 x
만 정의합니다.
b = uicontrol('Style','pushbutton','Callback',@(src,event)myfun(x));
간단한 명령 몇 개를 실행하려는 경우에는 문자형 벡터를 지정해도 되지만, 명령 개수가 많아지면 콜백을 관리하기 힘들 수 있습니다. 지정하는 문자형 벡터는 함수에 대한 인수를 포함할 수 있는 유효한 MATLAB 표현식으로 구성되어야 합니다. 예를 들면 다음과 같습니다.
hb = uicontrol('Style','pushbutton',... 'String','Plot line',... 'Callback','plot(rand(20,3))');
'plot(rand(20,3))'
은 유효한 명령이기 때문에, 사용자가 버튼을 클릭하면 MATLAB이 이 명령을 실행합니다. 다음은 문자형 벡터에 변수가 포함된 예입니다.'plot(x)'
x
는 기본 작업 공간에 있어야 합니다. 그렇지 않으면 오류가 반환됩니다. 콜백 속성값을 할당할 때는 변수가 존재하지 않아도 되지만, 사용자가 콜백을 트리거할 때는 변수가 존재해야 합니다.함수 핸들이나 셀형 배열로 지정된 콜백과 달리, 문자형 벡터에서는 MATLAB이 구문 오류 또는 누락된 종속성을 확인하지 않습니다. MATLAB 표현식에 문제가 있어도 사용자가 콜백을 트리거할 때까지 발견되지 않습니다.