Как использовать одну и ту же переменную в разных функциях в GUI MATLAB - PullRequest
0 голосов
/ 31 августа 2018

У меня есть всплывающее меню со следующим кодом. Есть два варианта, как С1 и С2. Если пользователь выбирает 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)

Тем не менее, у меня есть некоторая ошибка в функции set и get, и поэтому у меня проблемы. Помогите пожалуйста.

Ответы [ 2 ]

0 голосов
/ 01 сентября 2018

Чтобы избежать использования глобалов, вы можете использовать свойство UserData окна рисунка (при условии, что объекты ui являются дочерними для одного рисунка). Например:

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)
0 голосов
/ 31 августа 2018

Может быть, вы можете попробовать глобальные переменные

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

и использовать ту же строку кода global X; внутри любой функции, где вы хотите использовать переменную х.

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

Любое изменение значения этого X в любой функции видимо для всех функций, которые объявляют его как глобальное.

...