如何在GUI MATLAB中的不同函数中使用相同的变量

时间:2018-08-31 15:24:38

标签: matlab user-interface get set matlab-guide

我有一个包含以下代码的弹出菜单。有两个选项,分别为C1和C2。如果用户选择C1,我想将值设置为10,如果用户选择C2,我想将值设置为20。

function pop_Callback(hObject, eventdata, handles)

contents = cellstr(get(hobject,'String'));
A = contents{get(hObject,'Value')};
if (strcmp(A,'C1'))
    X = 10;
elseif (strcmp(A,'C2'))
    X = 20;
end
set(handles.pop,X)

我想使用带有按钮和静态文本的另一个功能来显示答案,无论输出值是设置值+12。

function push_Callback(hObject, eventdata, handles)

inX = get(handles.pop,X);
out = inX + 12;
set(handles.ans,'String',out)

但是,我在设置和获取功能时出现了一些错误,因此遇到了麻烦。请帮助。

2 个答案:

答案 0 :(得分:1)

为避免使用全局变量,可以使用图形窗口的UserData属性(假设uiobject是同一图形的子级)。例如:

function pop_Callback(hObject, eventdata, handles)

% ...

set( ancestor(hObject,'figure'), 'UserData', X )

function push_Callback(hObject, eventdata, handles)

inX = get( ancestor(hObject,'figure'), 'UserData' );
out = inX + 12;
set(handles.ans,'String',out)

答案 1 :(得分:0)

也许您可以尝试使用全局变量

function pop_Callback(hObject, eventdata, handles)
global X;
contents = cellstr(get(hobject,'String'));
A = contents{get(hObject,'Value')};
if (strcmp(A,'C1'))
X = 10;
elseif (strcmp(A,'C2'))  
X = 20;
set(handles.pop,X)
end

并使用同一行代码全局X;在任何要使用变量x的函数中。

function push_Callback(hObject, eventdata, handles)
global X;
out = X + 12;
set(handles.ans,'String',out)

在任何函数中,对该X的任何值更改对于将其声明为全局的所有函数都是可见的。