2013-07-29 3 views
1

매개 변수를 설정하고 다른 m- 파일에서 이러한 매개 변수를 사용하는 GUI를 만들었습니다. GUI에서 생성 된 변수는 입력 변수와 m- 파일의 작업 공간이 다릅니다. 그 이유로, 나는 global variables을 사용하려고 노력하고 있지만 sucesfully : 변수는 m-File empty로갑니다.값없이 GUI에서 전역 변수 설정 - Matlab

나는 사용자가 매개 변수를 설정할 수있는 3 개 편집 상자가있는 GUI가 (0 또는 1), (하나 개의 편집 상자에 대한 코드를 표시)이 코드를 사용하여 :

function density_Callback(hObject, eventdata, handles) 
% hObject handle to density (see GCBO) 
% eventdata reserved - to be defined in a future version of MATLAB 
% handles structure with handles and user data (see GUIDATA) 

% Hints: get(hObject,'String') returns contents of density as text 
%  str2double(get(hObject,'String')) returns contents of density as a double 
global density 
density = str2double(get(hObject, 'String')); 
global Variavel_1 
assignin('base', 'Variavel_1', density); 

M-을

:이 코드 (test.m)의 나머지 editboxes에서이 Variavel_1 및 다른 사람을 사용한다

function calculate_Callback(hObject, eventdata, handles) 
% hObject handle to calculate (see GCBO) 
% eventdata reserved - to be defined in a future version of MATLAB 
% handles structure with handles and user data (see GUIDATA) 

test %m-File that uses variables set in GUI 

그리고 m-파일 : 파일이 코드를 사용하여 GUI 버튼에서 호출 10

하지만 내가 갖고있는 모든 것은 그 모든 변수가 비어 있습니다! (GUI 코드 안에이 코드를 넣을 수는 있지만이 간단한 m-File은 훨씬 더 복잡해 지므로 m- 파일로 이동하는 변수가 필요하기 때문에 실제 코드는 아닙니다.)

Variavel_1 = [] 

Variavel_2 = [] 

Sum = [] 

왜 전역 변수가 실패하는지 이해할 수 있습니까?

미리 감사드립니다.

답변

2

자동 생성시 OpeningFcn 콜백에서 GUIDE를 사용하는 경우 handle 구조에서 변수/필드를 정의 할 수 있습니다.

초기화 부분입니다. 이를 사용하는 데이터는 GUI의 모든 위젯에서 공유 할 수 있습니다.

그래서,이 콜백 등 variable_1, variable_2, sum, 당신은 다음과 같이 할 수 있습니다 : 당신의 Button 또는 Edit 콜백 말,

handles.variable_1 = 1; 
handles.variable_1 = 2; 
handles.sum = handles.variable_1 + handles.variable_1 = 1; 

% At end update handles structure 
handles.output = hObject; 
guidata(hObject, handles); 

다른 콜백을

당신은 업데이트 할 수 있습니다 이 값은 다음과 같이 정상적으로 나타납니다.

handles.variable_1 = 12; 
handles.variable_1 = 23; 
handles.sum = handles.variable_1 + handles.variable_1 = 1; 

% Now, at end of callback save the change you made to the structure 
guidata(hObject,handles) 

이러한 va 명령 창에서 lues 유형 handles을 입력하십시오.

참고 : 자세한 내용은 Store or retrieve GUI data.

이러한 변수를 GUI에서 다른 스크립트로 사용하려면 variable_1이 업데이트되는 콜백의 등과 같이 과 같은 작업 공간에 간단하게 할당하십시오.

그런 다음 m 스크립트에서이 변수를 직접 사용할 수 있습니다.

+0

답장을 보내 주셔서 감사합니다. GUI 코드 안에 합계 식을 정의 할 수는 있지만 실제로는 아닙니다. 프로포즈. 미안해하지 않아서 미안해. 아르 자형. m- 파일이 훨씬 복잡하기 때문에 이러한 변수를 m- 파일에 전달해야합니다. – Luiz

+0

@ 루이즈'm 파일이란? GUI 그 자체가 아닌'm- 파일 '? GUI 코드에서'callbacks'는'm-file'에 있고 그것의 디자인은'.fig' 파일에 저장 될 것입니다 'm-file'을 생성 한 적이 있습니까? 안내? – P0W

+0

예, m- 파일은 내 프로그램에서 "test"라는 이름의 파일로, 변수의 합계를 만듭니다. GUI 푸시 버튼은 위에 표시된 것처럼이 "test.m"을 호출합니다! – Luiz

0

난 그냥 test 함수를 정의 할 수 있다고 생각합니다 ("test"에 저장 됨).같은 m ") : 다음

function sum = test(x, y) 
sum = x + y; 

그리고는 사용하여 calculate_CallBack 기능에서 test 함수를 호출 : 나는 잘 MATLAB의 GUI 프로그래밍에 정통한 아니에요, 틀림없이

sum = test(Variavel_1, Variavel_2); 

를, 그래서이있을 수 있습니다 정말 분명한 이유는이 작업을 수행 할 수 없지만 전역 변수를 사용하지 않기 때문에 코드가 더 깨끗해집니다.