Matlab GUIDE에서는 GUI.m 파일에서 모든 GUI 핸들을 저장할 수있는 방법이 있으므로 다른 함수 (다른 .m 파일, GUI.m 파일의 다른 콜백 중 하나가 아닌)?Matlab에서 GUI 핸들 저장하기
이 핸들을 다른 기능에 수동으로 전달하고 싶지는 않습니다.
Matlab GUIDE에서는 GUI.m 파일에서 모든 GUI 핸들을 저장할 수있는 방법이 있으므로 다른 함수 (다른 .m 파일, GUI.m 파일의 다른 콜백 중 하나가 아닌)?Matlab에서 GUI 핸들 저장하기
이 핸들을 다른 기능에 수동으로 전달하고 싶지는 않습니다.
을 사용할 수 있습니다 현재 숫자 (예 : 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
파일로드 오버 헤드가 있으며 데이터 지속성이 필요하지 않습니다.
findall (figure_handle)을 사용하십시오.
예 :이 그림은 직접 처리하지 않은 경우 당신이 가이드를 사용하여 GUI를 설계하고 있기 때문에
F=figure;
H=uicontrol('parent',F,'style','pushbutton');
uihandles=findall(F,'type','uicontrol');
, 당신은 당신이 착용 할 uicontrol
객체를
uihandles=findall(gcf,'type','uicontrol');
고마워요! 하지만 그 말은 아직 내가해야할 건지, 안 그래? 나는 그 일도하고 싶지 않다. 그게 가능하니? –
@Hugh가 의미하는 것은 사전에 그림 핸들을 알고 있다면 (또는 그림이 활성 그림 (예 :'gcf')가 될 것으로 예상하는 경우) 두 번째'.m' 파일에서'findall'을 사용하여 그 그림에서 모든 uicontrol 핸들을 동적으로 검색합니다. 그의 코드는 GUI.m이 아닌 외부 함수에 추가해야하는 코드입니다. – Bee
fig_handle = findall (0, 'Tag', 'MyUniqueTag') –
: 생성 기능 - set (fig_handle, 'Tag', 'MyUniqueTag') -에서 태그를 설정하여 그림 핸들을 찾을 수도 있습니다. !! 내가 필요한 것. 핸들을 필요로하는 함수가 처음에 다른 함수 집합 내부 깊숙히 묻혀 있었기 때문에 왜 핸들을 전달하지 않는지에 대한 구체적인 이유가 있습니다. 많은 기능을 통해 핸들을 전달하고 싶지 않았습니다. –
대안에 관한 정보 :이 경우 유용한 일련의 기능은 "assignin"과 "evalin"입니다.사용 : "assignin ('base', 'temphandles', handles);" 내부에서 모든 함수는 그 함수의 "핸들"을 기본 작업 영역의 "temphandles"에 할당합니다. 반대로 "handles = evalin ('base', 'temphandles');" 기본 작업 영역의 "temphandles"를 현재 함수의 "핸들"에 할당합니다. –