2013-05-20 9 views
0

Я хочу, чтобы вставить массив, используя графический интерфейс, но я не понимаю, почему я получаю эти ошибки:вставки массива с помощью графического интерфейса в среде MATLAB

Error using waitfor 

Undefined function or variable 'A'. 

Error using waitfor 

Error while evaluating uicontrol Callback 

КОД:

function read() 
clear all 
clc 

n=2; 

b=50; 
a=300; 
B = nan(n); 
S.fh = figure('units','pixels',... 
       'position',[500 500 500 500],... 
       'menubar','none',... 
       'numbertitle','off',... 
       'name','Matrix',... 
       'resize','off'); 
for i=1:n  
    for j=1:n 
     A(i,j) = uicontrol('style','edit','units','pixels',... 
       'position',[b a 50 50],'fontsize',20,'string','',... 
       'Callback', 'B(A == gco) = str2double(get(gco, ''string''));'); 
     b = b+60; 
    end 
    b = 50; 
    a = a-60; 
end 

S.bb = uicontrol('style','push',... 
       'units','pixels',... 
       'position',[300 10 75 50],... 
       'fontsize',14,... 
       'string','Done',... 
       'callback','close'); 

waitfor(S.fh) 
B 
+0

PS..если я удаляю первую строку (функция read()) .. работает, но я хочу использовать с функцией, потому что это часть программы с большим количеством функций, и я хочу чтобы вернуть массив B в другую функцию ... спасибо – alinush2693

+1

использовать анонимную функцию для обратного вызова вместо строки. – Shai

+0

Ну, вы не определили 'A' перед его использованием. Возможно, попробуйте добавить 'A = []' перед первым циклом 'for'. – Justin

ответ

0

Вместо того, чтобы использовать обратные вызовы для всех полей редактирования отдельно, я рекомендую один обратный вызов, который считывает все значения на кнопке. Например:

function read() 
clear all 
clc 

n=2; 

b=50; 
a=300; 
% A = zeros(n); 
S.fh = figure('units','pixels',... 
       'position',[500 500 500 500],... 
       'menubar','none',... 
       'numbertitle','off',... 
       'name','Matrix',... 
       'resize','off'); 
for i=1:n  
    for j=1:n 
     A(i,j) = uicontrol('style','edit','units','pixels',... 
       'position',[b a 50 50],'fontsize',20,'string',''); 
       % no callback for the edit boxes 

     b = b+60; 
    end 
    b = 50; 
    a = a-60; 
end 

S.bb = uicontrol('style','push',... 
       'units','pixels',... 
       'position',[300 10 75 50],... 
       'fontsize',14,... 
       'string','Done',... 
       'callback',@(~,~)(readvalues(A,n))); 
       % callback that reads all the values in one run 
       % (and closes the figure as you wanted) 

waitfor(S.fh) 


function readvalues(A,n) 
B = zeros(n); 
for i=1:n 
    for j=1:n 
     B(i,j) = str2double(get(A(i,j), 'String')); 
    end 
end 
disp(B) 
close 
+0

Большое вам спасибо. – alinush2693

Смежные вопросы