在GUI中设置的全局变量没有值 - Matlab

时间:2013-07-29 20:24:39

标签: matlab user-interface global-variables

我创建了一个GUI来设置参数并在另一个m-File中使用这些参数。我知道在GUI中创建的变量位于从输入变量到m-File的不同工作空间中。出于这个原因,我正在尝试使用global variables,但不是太过分了:变量转到m-File为空。

我有一个GUI,它有3个编辑框,用户可以使用此代码设置参数(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 BUTTON调用m-File:

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-File应使用此Variavel_1以及此代码中剩余编辑框中的其他编辑器(test.m):

global Variavel_1
global Variavel_2
global sum    

Variavel_1
Variavel_2
sum = Variavel_1 + Variavel_2

但我所有的变数都是空的! (我知道我可以将这些代码放在GUI代码中,但这不是真正的原因,因为这个简单的m-File总和将要复杂得多,所以我需要将变量转到m-File)。

Variavel_1 = []

Variavel_2 = []

Sum = []

有人能理解全局变量失败的原因吗?

提前致谢!

2 个答案:

答案 0 :(得分: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)

要验证这些值,请在命令窗口中键入handles

参考: Store or retrieve GUI data 了解更多详情。

要将这些变量从GUI用于其他脚本,只需在工作区中分配它们即可 <{1}}等在任何assignin('base','variable_1',handles.variable_1);更新的回调中都是如此。

然后,在您的m脚本中,您可以直接使用这些变量。

答案 1 :(得分:0)

我认为您可以将test函数(保存在&#34; test.m&#34;中)定义为:

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

然后使用以下功能从test功能调用calculate_CallBack功能

sum = test(Variavel_1, Variavel_2);

不可否认,我不熟悉MATLAB中的GUI编程,因此可能有一些非常明显的原因导致您无法做到这一点,但这避免了使用全局变量,这通常会使代码更清晰。