2012-04-02 10 views
3

Ich mache eine GUI mit Matlab's Guide. Ich platziere Punkte mit impoint und benutze addNewPositionCallback um meine 'Punktliste' zu aktualisieren. Eines der Argumente für meine Update-Funktion, die ich als Callback gebe, ist das 'handle'-Objekt. Aber Matlab übergibt das nach Wert. Wenn also der Callback aufgerufen wird, habe ich das Handles-Objekt dort, aber es ist eine veraltete Version. Ich hätte gerne so etwas wie einen Zeiger auf das Handles-Objekt.Matlab GUI, brauchen behandelt Objekt

Oder allgemeiner: Ich würde gerne auf das 'handles' Objekt irgendwo in einer Funktion zugreifen, wo ich es nicht als Parameter habe.

Edit: So habe ich eine Callback-Funktion, die wie folgt aussehen:

function updatePosition(pos, hObject, handles)

Was ich als Callback wie folgt hinzu:

addNewPositionCallback(testh,@(pos) updatePosition(pos, hObject, handles));

Und ich habe eine Punktliste in den Griffen, handles.pointlist. Es sollte 5 Punkte enthalten, aber wenn ich einen updatePosition-Aufruf für den ersten Punkt habe, enthält die Liste nur einen Punkt: Die Handles scheint nicht aktualisiert zu sein, es hat nur eine Kopie von früher.

Antwort

0

Wenn Sie Ihre GUI mit GUIDE entwerfen, speichert handles.output die Handles auf der Hauptschnittstelle. Also, wenn Sie diese Zeile in Ihrer Callback hinzufügen:

handles=guidata(handles.output); 

es Ihre Griffe auf die aktuelle Version aktualisieren soll. Sie können einige Details über alle diese hier: http://www.matlabtips.com/guide-me-in-the-guide/

3

Wie Javascript, Matlab Skript kann Schließungen als Funktion Griffe erstellen. Das bedeutet, dass es Variablen "erfassen" kann. Sie können updatePosition in einem Kontext erstellen, in dem Sie Zugriff auf das Objekt handles haben. Sie sollten es so machen:

H = handles.figure1; % get the figure handle 
updatePosition = @(p) get(guihandles(H)... % the guihandles(H) contains the handles structure of the figure. Do whatever you need with it. 

addNewPositionCallback(testh,updatePosition);