WICHTIG: Der Betrieb von goMatlab.de wird privat finanziert fortgesetzt. - Mehr Infos...

Mein MATLAB Forum - goMatlab.de

Mein MATLAB Forum

 
Gast > Registrieren       Autologin?   

Partner:




Forum
      Option
[Erweitert]
  • Diese Seite per Mail weiterempfehlen
     


Gehe zu:  
Neues Thema eröffnen Neue Antwort erstellen

Datenuebergabe zwischen 2 GUIs mit SETAPPDATA und GETAPPDATA

 

swizz-john
Forum-Anfänger

Forum-Anfänger


Beiträge: 47
Anmeldedatum: 28.04.13
Wohnort: ---
Version: MatlabR2013b
     Beitrag Verfasst am: 08.09.2015, 15:23     Titel: Datenuebergabe zwischen 2 GUIs mit SETAPPDATA und GETAPPDATA
  Antworten mit Zitat      
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

h=handles.gui2
data= getappdata(h,'data')
set(handles.result,'data',data)



Im Internet habe ich leider noch kein richtig einfaches beispiel gesehen, das diesen essentiellen Schritt der GUI Programmierung einfach erlaeutert Confused
Ich bin sehr dankbar fuer eure Hilfe!!

Schoene Gruesse, swizz-john

gui2.fig
 Beschreibung:

Download
 Dateiname:  gui2.fig
 Dateigröße:  2.73 KB
 Heruntergeladen:  361 mal
gui2.m
 Beschreibung:
Subgui

Download
 Dateiname:  gui2.m
 Dateigröße:  4.9 KB
 Heruntergeladen:  384 mal
testmenues.fig
 Beschreibung:

Download
 Dateiname:  testmenues.fig
 Dateigröße:  2.62 KB
 Heruntergeladen:  355 mal
testmenues.m
 Beschreibung:
Obergui

Download
 Dateiname:  testmenues.m
 Dateigröße:  5.01 KB
 Heruntergeladen:  379 mal
Private Nachricht senden Benutzer-Profile anzeigen


Jan S
Moderator

Moderator


Beiträge: 11.057
Anmeldedatum: 08.07.10
Wohnort: Heidelberg
Version: 2009a, 2016b
     Beitrag Verfasst am: 10.09.2015, 02:01     Titel: Re: Datenuebergabe zwischen 2 GUIs mit SETAPPDATA und GETAPP
  Antworten mit Zitat      
Hallo swizz-john,

Bitte erkläre noch, was "es läuft nicht" genau heißt. Gibt es eine Fehlermeldung, wenn ja, welche?

Gruß, Jan
Private Nachricht senden Benutzer-Profile anzeigen
 
swizz-john
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 47
Anmeldedatum: 28.04.13
Wohnort: ---
Version: MatlabR2013b
     Beitrag Verfasst am: 10.09.2015, 07:23     Titel:
  Antworten mit Zitat      
Hi Moderator,

mit

Code:
function pushbutton1_Callback(hObject, eventdata, handles)

 hTestGui = findobj('Tag','testmenues');

 val1 = str2double(get(handles.edit1,'String'));
 val2 = str2double(get(handles.edit2,'String'));

 if ~isempty(hTestGui)
     % save the data to the other GUI
     setappdata(hTestGui, 'val1', val1);
     setappdata(hTestGui, 'val2', val2);

     % update the result
     handlesTestGui = guidata(hTestGui);
     if isfield(handlesTestGui,'result')
         set(handlesTestGui.result,'String',num2str(val1+val2));
     end
 end

 close


funktioniert es. Dazu muss noch der Code unter result_Callback von 'testmenues' geloescht werden, da da ein handle verwendet wurde was nicht existiert.

Schoene Gruesse, swizz-john
Private Nachricht senden Benutzer-Profile anzeigen
 
swizz-john
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 47
Anmeldedatum: 28.04.13
Wohnort: ---
Version: MatlabR2013b
     Beitrag Verfasst am: 10.09.2015, 12:49     Titel: Verstaendnis der Handles!?
  Antworten mit Zitat      
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;

  close(Try1_subgui)  %Schliesse die GUI


 


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
Private Nachricht senden Benutzer-Profile anzeigen
 
Neues Thema eröffnen Neue Antwort erstellen



Einstellungen und Berechtigungen
Beiträge der letzten Zeit anzeigen:

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
.





 Impressum  | Nutzungsbedingungen  | Datenschutz | FAQ | goMatlab RSS Button RSS

Hosted by:


Copyright © 2007 - 2024 goMatlab.de | Dies ist keine offizielle Website der Firma The Mathworks

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.