2013-06-17 4 views
0

Matlab GUIDE에서는 GUI.m 파일에서 모든 GUI 핸들을 저장할 수있는 방법이 있으므로 다른 함수 (다른 .m 파일, GUI.m 파일의 다른 콜백 중 하나가 아닌)?Matlab에서 GUI 핸들 저장하기

이 핸들을 다른 기능에 수동으로 전달하고 싶지는 않습니다.

답변

1

을 사용할 수 있습니다 현재 숫자 (예 : GUI.fig)는 handles 구조체에 자동으로 핸들이 추가됩니다.이 변수는 콜백간에 전달됩니다. handles은 또한 일반적으로 handles 구조체에 해당 변수를 추가하고 guidata() 기능을 사용하여 handles을 저장함으로써 콜백간에 다른 프로그램 변수를 전달하는 데 사용됩니다.

handles을 외부 함수에 전달하는 가장 쉬운 방법은 입력 매개 변수로 함수에 전달하는 것입니다. 예를 들어 다른 외부 파일이 auxiliary.m이라고하고 auxiliary(...)이라는 함수가있는 경우 auxiliary(...)을 디자인하여 handles이라는 추가 매개 변수 하나를 허용하면 모든 그림 핸들과 기타 수동으로 추가 한 변수를받을 수 있습니다. 이것은 귀하의 GUI.m이 현재 작동하는 것과 정확히 같습니다. GUI.m은 하나의 파일처럼 보이지만 사실 많은 콜백 함수의 컨테이너입니다. 각 콜백 함수는 동일한 이름의 단일 함수를 포함하는 별도의 .m 파일 일 수 있습니다. 예를 들어, pushbutton1_Callback(hObject, eventdata, handles)GUI.m에서 잘라내어 pushbutton1_Callback.m 파일에 붙여 넣는 경우 프로그램은 같은 이름의 중복 파일이없는 한 똑같은 방식으로 작동합니다. 더 IO가 없기 때문에

% inside GUI.m 
save('handles.mat', 'handles'); 

%inside auxiliary.m 
load('handles.mat', 'handles'); 

내가 첫 번째 방법을 권장합니다

여전히 외부 함수에 직접 핸들을 통과하지 주장하는 경우, 단지 handles 구조를 저장하고 두 번째 .m 파일로드 오버 헤드가 있으며 데이터 지속성이 필요하지 않습니다.

+0

: 생성 기능 - set (fig_handle, 'Tag', 'MyUniqueTag') -에서 태그를 설정하여 그림 핸들을 찾을 수도 있습니다. !! 내가 필요한 것. 핸들을 필요로하는 함수가 처음에 다른 함수 집합 내부 깊숙히 묻혀 있었기 때문에 왜 핸들을 전달하지 않는지에 대한 구체적인 이유가 있습니다. 많은 기능을 통해 핸들을 전달하고 싶지 않았습니다. –

+1

대안에 관한 정보 :이 경우 유용한 일련의 기능은 "assignin"과 "evalin"입니다.사용 : "assignin ('base', 'temphandles', handles);" 내부에서 모든 함수는 그 함수의 "핸들"을 기본 작업 영역의 "temphandles"에 할당합니다. 반대로 "handles = evalin ('base', 'temphandles');" 기본 작업 영역의 "temphandles"를 현재 함수의 "핸들"에 할당합니다. –

1

findall (figure_handle)을 사용하십시오.

예 :이 그림은 직접 처리하지 않은 경우 당신이 가이드를 사용하여 GUI를 설계하고 있기 때문에

F=figure; 
H=uicontrol('parent',F,'style','pushbutton'); 
uihandles=findall(F,'type','uicontrol'); 

, 당신은 당신이 착용 할 uicontrol 객체를

uihandles=findall(gcf,'type','uicontrol'); 
+0

고마워요! 하지만 그 말은 아직 내가해야할 건지, 안 그래? 나는 그 일도하고 싶지 않다. 그게 가능하니? –

+3

@Hugh가 의미하는 것은 사전에 그림 핸들을 알고 있다면 (또는 그림이 활성 그림 (예 :'gcf')가 될 것으로 예상하는 경우) 두 번째'.m' 파일에서'findall'을 사용하여 그 그림에서 모든 uicontrol 핸들을 동적으로 검색합니다. 그의 코드는 GUI.m이 아닌 외부 함수에 추가해야하는 코드입니다. – Bee

+0

fig_handle = findall (0, 'Tag', 'MyUniqueTag') –