Verfasst am: 08.09.2015, 15:23
Titel: Datenuebergabe zwischen 2 GUIs mit SETAPPDATA und GETAPPDATA
Hi,
Mein Ziel ist es, Inputdaten vom GUI mit dem Namen 'gui2' in das GUI namens 'testmenues' zu bringen.
'gui2' wird gestartet wenn der button 'untitled3' in der menueleiste gedrueckt wird.
Anschliessend sollen diese input daten aus 'gui2' an 'testmenues' uebergeben werden das Ergebnis der Addition dieser beiden numerischen Input Werte soll im Feld 'resultat' angezeigt werden.
Ich habe diese beiden GUIs mit GUIDE erstellt, habe viel gelesen und versucht die Datenuebergabe zwischen den GUIs mit setappdata und getappdata zu realisieren.
Was mache ich falsch? Es laeuft nicht ...ich glaube ich habe echt Probleme mit den Handles, weil ich das noch nicht ganz verstehe. Hier der relevante Code fuer das speichern eines der Eingabewerte in 'gui2'!
Code:
function edit2_Callback(hObject, eventdata, handles) % hObject handle to edit2 (see GCBO) % eventdata reserved - to be defined in a future version of MATLAB % handles structure with handles and user data (see GUIDATA)
% Hints: get(hObject,'String') returns contents of edit2 as text % str2double(get(hObject,'String')) returns contents of edit2 as a double
data=str2double(get(hObject,'String')) % Store the data
h = handles.gui2;
setappdata(h,'data',data) %speichert data ab
Anschliessend der relevante Part fuer das Holen der Daten
Code:
function result_Callback(hObject, eventdata, handles) % hObject handle to result (see GCBO) % eventdata reserved - to be defined in a future version of MATLAB % handles structure with handles and user data (see GUIDATA)
% Hints: get(hObject,'String') returns contents of result as text % str2double(get(hObject,'String')) returns contents of result as a double
Im Internet habe ich leider noch kein richtig einfaches beispiel gesehen, das diesen essentiellen Schritt der GUI Programmierung einfach erlaeutert
Ich bin sehr dankbar fuer eure Hilfe!!
if ~isempty(hTestGui) % save the data to the other GUI setappdata(hTestGui, 'val1', val1);
setappdata(hTestGui, 'val2', val2);
% update the result
handlesTestGui = guidata(hTestGui);
ifisfield(handlesTestGui,'result') set(handlesTestGui.result,'String',num2str(val1+val2));
end end
funktioniert es. Dazu muss noch der Code unter result_Callback von 'testmenues' geloescht werden, da da ein handle verwendet wurde was nicht existiert.
Verfasst am: 10.09.2015, 12:49
Titel: Verstaendnis der Handles!?
Hi,
wie oben beschrieben kann man Daten zwischen 2 GUIs mit setappdata und getappdata hin und herschieben ohne den Workspace damit zuzumuellen.
Ich befuerchte aber dass ich die genaue Funktionsweise, insbesondere der handles zu den GUI-Objekten immer noch nicht ganz verstanden habe. Daher versuche ich nun mal anhand eines Beispiels den Sachverhalt zu beschreiben:
Angenommen wir haben eine GUI namens 'Try1_subgui.m' und eine weitere namens 'Try1.m'. Jetzt wird ein Integerwert in ein Textfeld namens 'Tolerance' von 'Try1_subgui.m' eingegeben vom User. Dieser Wert soll durchgereicht werden zu 'Try1.m', und zwar nach Druecken eines Push -Buttons ' ok_'. Das ganze geschieht mit Hilfe von getappdata und setappdata. Die Callback Funktion des Push-Buttons sieht folgendermassen aus.
Code:
function ok__Callback(hObject, eventdata, handles)
%Schreibe eingegebenen Wert vom User in die Variable 'Tolerance'
Tolerance = str2double(get(handles.tolerance_,'String'))
%Speichere Tag zum GUI von Try1
hMainGui = findobj('Tag','try1_')
%Speichere die Variable Tolerance und assoziiere Sie mit dem Objekt zur GUI Try1
setappdata(hMainGui, 'Tolerance' , Tolerance);
%Update die handles zur GUI von Try1 damit 'Tolerance' jetzt "sichtbar" ist.
handlesMainGui = guidata(hMainGui)
%Greife ueber handlle auf die Variable Tolerance zu und gebe ihr den Eingabewert des Users
handlesMainGui.Tolerance=Tolerance;
Um den Wert von 'Tolerance' jetzt in dem GUI Try1 auslesen zu koennen benoetige ich zuerst wieder den Tag zu diesem GUI. Anschliessend kann man mit getappdata und dem Objekt hMainGui den Wert auslesen. In Try1 geschieht also folgendes.
Code:
hMainGui = findobj('Tag','try1_')% Finde und speichere Tag zur Main Oberflaeche
Tolerance = getappdata(hMainGui , 'Tolerance')
Ein paar Fragen:
1) Ist das Vorgehen so korrekt verstanden und beschrieben?
2) Handles sind immer zu einem Objekt verbunden richtig? Sie koennen entweder Zugriff auf durch GUIDE vordefinierte graphische Eigenschaften (axes, figure, etc) sein oder aber auch aus vom Nutzer hinzugefuegten Daten bestehen, korrekt?
3) Die handles von Try1_subgui werden nicht an Try1 weitergereicht richtig? Durch die handles wird quasi nur ein kurzfristiger Zugriff ermoeglich okaz?
Wenn ich naemlich zum Schluss disp(handles) eingebe hat sich bei den handles zum GUI Try1 nichts geaendert. Der Wert von Tolerance ist dort nicht zu finden. Lediglich bei den Handles zu Try1_subgui taucht nun neben den Grafikobjekthandles (axes...) auch der Wert Tolerance auf.
Ich bin sehr dankbar fuer eine Rueckmeldung, ob ich dieses so essentielle Vorgehen korrekt verstanden habe.
Schoene Gruesse, swizz-john
Einstellungen und Berechtigungen
Du kannst Beiträge in dieses Forum schreiben. Du kannst auf Beiträge in diesem Forum antworten. Du kannst deine Beiträge in diesem Forum nicht bearbeiten. Du kannst deine Beiträge in diesem Forum nicht löschen. Du kannst an Umfragen in diesem Forum nicht mitmachen. Du kannst Dateien in diesem Forum posten Du kannst Dateien in diesem Forum herunterladen
MATLAB, Simulink, Stateflow, Handle Graphics, Real-Time Workshop, SimBiology, SimHydraulics, SimEvents, and xPC TargetBox are registered trademarks and The MathWorks, the L-shaped membrane logo, and Embedded MATLAB are trademarks of The MathWorks, Inc.