2016-07-15 2 views
0

У меня есть функция main(). в этой «основной» я вызываю другую функцию A(). У меня есть GUIde и есть переменная 'number' в этом. Как я могу получить доступ к «номеру» из A() или изменить значение «число» из A()?Как получить доступ к функциям GUI MATLAB из отдельного файла m - matlab

1- код ниже не работает.

main(handles) 
    %some code 
    A(handles); 

    function A(handles) 
    set(handles.number,0); 
    end 
end 

2- и этот тоже не работает.

main(handles) 
    %some code 
    A(handles); 

    function A(handles) 
    handles.setNumberFnc(5); 
    end 
end 


%%%%%in GUI i have this function. 

function setNumberFnc(n) 
    handles.number = n; 
    guidata(hObject, handles); 

Я знаю, что эта функция не имеет «hObject», я не знаю, что делать?

3- Можно ли использовать «Глобальное число» в графическом интерфейсе и в A()?

+0

Я предлагаю вам использовать отладчик - идти шаг за шагом, и смотреть значения '' handles' и hObject' ... – Rotem

+0

Можете ли вы показать нам строка, которая определяет вашу переменную 'handles'? –

ответ

0

Я решить мою проблему. Только нужно было определить глобальную переменную 'number' во всех необходимых функциях. теперь я легко могу изменить значение «number» в GUI или в функции A(). Не нужно «устанавливать» функцию.

main() 
    %some code 
    A(); 

    function A() 
    global number; 
    disp(number); 
    number = 5; 
    end 
end 

и в GUIDE:

function B_Callback(hObject, ~, handles) 
global number; 
number = 2; 
guidata(hObject, handles); 
0

Вы решаете проблему по-другому, что я обычно делаю. Для меня GUI является основным объектом, и я определяю свои обратные вызовы для кнопок и т. Д., Чтобы вызывать внешние скрипты и функции.

Вы хотите запустить отдельный скрипт или функцию, которая затем изменяет GUI. Это тоже хорошо! Все, что вам нужно, это дескриптор GUI, который вы можете получить, например, с помощью gcf (предполагая, что графический интерфейс - это активное окно с фигурами). Тем не менее, ваш setNumberFcn является local function (или, возможно, nested function, что почти то же самое), и вы не можете назвать его из другого скрипта или файла функции. Вместо этого, вы должны поместить его в файл main.m, в виде

function main() 

    fig_handle = gcf; 
    numfield_handle = findobj(gcf, 'NumFieldTagThatYouDefinedInGUIDE'); 

    function setNumberFcn(numfield_handle, number) 
     set(numfield_handle, 'String', num2str(number)) 
    end 

end