2013-07-29 50 views
1

我創建了一個GUI來設置參數並在另一個m-File中使用這些參數。我知道在GUI中創建的變量位於不同的工作空間中,從輸入變量到m-File。出於這個原因,我試圖使用global variables,但不是很順利:變量轉到m-File爲空。全局變量在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); 

的間文件從一個GUI按鈕調用,使用此代碼:

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文件應在此代碼(test.m)使用這個Variavel_1和其他人從剩餘editboxes 10

但是我所有的變量都是空的! (我知道我可以把這段代碼放在GUI代碼中,但這不是真正的先決條件,因爲這個簡單的m-File總和會更復雜,所以我需要變量去m-File)。

Variavel_1 = [] 

Variavel_2 = [] 

Sum = [] 

任何人都可以理解爲什麼全局變量失敗?

在此先感謝!

回答

2

在自動生成OpeningFcn回調,如果您使用GUIDE 您可以在handle結構中定義變量/字段。

這是初始化部分。由此使用的數據可以在GUI上的所有小部件之間共享。

所以,在此回調,爲variable_1variable_2sum等,你可以有類似以下內容:

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); 

在其他的回調,說你ButtonEdit回調

可以更新這些值如同以下正常值

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在命令窗口鍵入handles

Ref:Store or retrieve GUI data瞭解更多詳情。

要使用GUI從這些變量與其他腳本簡單的分配他們的工作空間 像assignin('base','variable_1',handles.variable_1);等任何回調,其中variable_1是得到更新的。

然後,在你的m腳本中,你可以直接使用這些變量。

+0

謝謝您的答覆。我知道我可以定義GUI代碼中的總和表達,但是這不是真正的我很抱歉沒有把它弄清楚河 我必須將這些變量傳遞給m文件,因爲m文件將比這更復雜。 – Luiz

+0

@Luiz哪個'm-file'?除了GUI本身以外的'm-file'? GUI代碼中,'callbacks'將在'M-file'和它的設計將被保存在一個'.fig'文件 你有沒有被自己創建的其他任何'M-file',比從'產生的其他指南「? – P0W

+0

是的,m-File是我的程序中名爲「test」的變量,它是變量總和的一個。 因此,GUI按鈕稱爲「test.m」,如上所示! – Luiz

0

我想你可以定義你的test函數(保存在「test」中。M「)爲:

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

,然後使用從calculate_CallBack函數調用你test功能:

sum = test(Variavel_1, Variavel_2); 

誠然,我不能很好地在MATLAB GUI編程精通,所以有可能會出現一些真正的明顯的原因,你不能做到這一點,但是這避免使用全局變量,這往往使更清潔的代碼。