2016-07-15 18 views
0

Ich habe eine Funktion namens Main(). In diesem 'Haupt' rufe ich eine andere Funktion A(). Ich habe eine GUIde und habe eine Variable 'Nummer' in diesem. Wie kann ich auf 'Nummer' von A() zugreifen oder den Wert von 'Nummer' von A() ändern?wie MATLAB GUI-Funktionen aus einer separaten m-Datei zugreifen - Matlab

1- Der folgende Code funktioniert nicht.

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

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

2- und dies funktioniert auch nicht.

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); 

ich weiß, diese Funktion hat kein "hObject" ich weiß nicht, was zu tun ist?

3- kann ich 'Globale Nummer' in GUI und in A() verwenden?

+0

Ich schlage vor, Sie den Debugger verwenden - Schritt für Schritt gehen, und beobachten Sie Werte von 'handles' und' hObject' ... – Rotem

+0

Können Sie uns zeigen die Linie, die Ihre Variablen "Griffe" definiert? –

Antwort

0

ich mein Problem gelöst haben. Nur war es notwendig, global die Variable 'Nummer' in allen notwendigen Funktionen zu definieren. Jetzt kann ich einfach den Wert von 'Nummer' in der GUI oder in der A() Funktion ändern. keine Notwendigkeit, Funktion zu "setzen".

main() 
    %some code 
    A(); 

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

und in der Führung:

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

Sie lösen das Problem anders herum, dass ich es normalerweise mache. Für mich ist die GUI das Hauptobjekt, und ich definiere meine Tastenrückrufe und solche um externe Skripte und Funktionen aufzurufen.

Sie möchten ein separates Skript oder eine Funktion ausführen, die dann die GUI ändert. Das ist auch in Ordnung! Alles, was Sie brauchen, ist das Handle der GUI, das Sie zB mit gcf erhalten können (vorausgesetzt, die GUI ist das gerade aktive Figurenfenster). Ihre setNumberFcn ist jedoch eine local function (oder möglicherweise eine nested function, die fast die gleiche Sache ist), und Sie können es nicht aus einem anderen Skript oder einer anderen Funktionsdatei aufrufen. Stattdessen würden Sie es in Ihre main.m Datei setzen müssen, in der Art von

function main() 

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

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

end