2017-01-04 2 views
-1

Ich möchte meine eigene Funktion in MATLAB erstellen, die einige Bedingungen überprüfen, aber ich weiß nicht, wie man dort handles sendet. Am Ende möchte ich etwas Text in der GUI von dieser anderen Funktion drucken. Ich kann handles.t1 nicht direkt in dieser Funktion verwenden, da es nicht innerhalb der Funktion zugänglich ist. Wie kann ich es dort weitergeben?Drucken von Text in meiner eigenen Funktion in GUIDE GUI mit "Handles"

function y = check(tab) 
    if all(handles.tab == [1,1,1]) 
      set(handles.t1, 'String', 'good'); 
     else 
      set(handles.t1, 'String', 'bad'); 
    end 
end 

bearbeiten

Nach Kommentar und erste Antwort, die ich ganz Rückruf setzen entschieden, wo ich meine Funktion aufrufen:

function A_Callback(hObject, eventdata, handles) 
if handles.axesid ~= 12 
    handles.axesid = mod(handles.axesid, handles.axesnum) + 1; 
    ax = ['dna',int2str(handles.axesid)]; 
    axes(handles.(ax)) 
    matlabImage = imread('agora.jpg'); 
    image(matlabImage) 
    axis off 
    axis image 
    ax1 = ['dt',int2str(handles.axesid)]; 
    axes(handles.(ax1)) 
    matlabImage2 = imread('tdol.jpg'); 
    image(matlabImage2) 
    axis off 
    axis image 
    handles.T(end+1)=1; 
    if length(handles.T)>2 
     check(handles.T(1:3)) 
    end 
end 
guidata(hObject, handles); 
+0

„Meine eigene Funktion“ können Sie * mehr * mehrdeutig sein? Ist das Teil einer programmatischen GUI? GUIDE-GUI? Zufällige MATLAB-Funktion? Klassendefinition Skript? Wie heißt diese Funktion? Siehe: [mcve] – excaza

+0

Ja, das ist GUIDE GUI. Als ich "meine eigene Funktion" schrieb, dachte ich, es ist etwas anderes als Callback-Funktion. Diese Funktion heißt "check" und überprüft, ob das Array die gleichen Werte wie in "if" hat. Was ich brauche, ist Wissen, wie kann ich "handles. (Whatever_here)" in meiner eigenen erklärten Funktion verwenden. – soommy12

Antwort

2

Sie müssen guidata verwenden, um die handles Struktur abrufen Dieser GUIDE wechselt automatisch zwischen Callbacks. Sie benötigen auch einen Griff zum figure, um das guidata abzurufen, und wir verwenden findall kombiniert mit der Tag-Eigenschaft (unten habe ich mytag als ein Beispiel verwendet), um die GUI-Abbildung zu finden.

handles = guidata(findall(0, 'type', 'figure', 'tag', 'mytag')); 

Wenn das Eingabeargument tab ein Handle auf eine Grafik ist das Objekt innerhalb Ihre Figur, die Sie gerade guidata auf dass nennen kann die handles struct

handles = guidata(tab); 

aktualisieren

zu erhalten

In Ihrem Update auf Ihre Frage, seit Sieanrufendirekt von einem Rückruf, einfach die notwendigen Variablen sind an die Funktion übergeben und dann auf sie normalerweise

function y = check(tab, htext) 
    if all(tab == [1 1 1]) 
     set(htext, 'String', 'good') 
    else 
     set(htext, 'String', 'bad') 
    end 
end 

Und dann aus Ihrem Rückruf

if length(handles.T) > 2 
    check(handles.T(1:3), handles.t1); 
end 

Alternativ arbeiten, können Sie die gesamte passierenhandles Struktur auf Ihre check Funktion

function check(handles) 
    if all(handles.tab == [1 1 1]) 
     set(handles.t1, 'string', 'good') 
    else 
     set(handles.t1, 'String', 'bad') 
    end 
end 

Und dann innerhalb Ihrer Callback-

if length(handles.T) > 2 
    check(handles) 
end 
+0

Ich verstehe die Idee überhaupt nicht. Ich habe die Frage aktualisiert. Kannst du mir eine ausführlichere Antwort geben, die auf mein Problem spezifiziert ist? – soommy12

+1

@Buszman Kennen Sie die Eigenschaft "Tag" Ihrer GUIDE-GUI? Sie sollten es in den Eigenschaften festlegen können. Alternativ habe ich ein Update basierend auf Ihrem Update zur Verfügung gestellt, das Ihnen zeigt, wie Sie die Informationen, die Sie benötigen, einfach direkt an Ihre Check-Funktion übergeben. – Suever

+0

Ich kenne die Tag-Eigenschaft nicht. Wie kann ich es überprüfen?Ich denke, ich muss ganze Handles übergeben, weil ich vier Textfelder habe (t1, t2, t3 und t4) – soommy12

Verwandte Themen