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

GUI Daten Variablen übergeben guidata setappdata getappdata

 

nschlange
Ehrenmitglied

Ehrenmitglied



Beiträge: 1.320
Anmeldedatum: 06.09.07
Wohnort: NRW
Version: R2007b
     Beitrag Verfasst am: 19.09.2008, 16:34     Titel: GUI Daten Variablen übergeben guidata setappdata getappdata
  Antworten mit Zitat      
Hier ein Beispiel, wie man Daten zwischen GUIs austauschen kann.
Da gibt es wohl schon einige Beiträge zu, aber da ich das noch nicht selber gemacht habe wollte ich es mal versuchen.
Bemerkungen und Kommentare sind willkommen!

Im Anhang 6 gepackte Dateien (einmal als Zip, einmal als Rar). Alle in ein Verzeichnis entpacken und hauptfenster.m ausführen.

passingvariables.zip
 Beschreibung:

Download
 Dateiname:  passingvariables.zip
 Dateigröße:  12.3 KB
 Heruntergeladen:  2974 mal
passingvariables.rar
 Beschreibung:

Download
 Dateiname:  passingvariables.rar
 Dateigröße:  12.05 KB
 Heruntergeladen:  1646 mal

_________________

Viele Grüße
nschlange

"Chuck Norris ejakuliert fluessigen Stahl!"
Private Nachricht senden Benutzer-Profile anzeigen E-Mail senden


steve
Ehrenmitglied

Ehrenmitglied



Beiträge: 2.029
Anmeldedatum: 03.09.07
Wohnort: Wien
Version: R2024a
     Beitrag Verfasst am: 24.09.2008, 07:50     Titel:
  Antworten mit Zitat      
Moin,

feine Sache, allerdings sind mir beim ausprobieren zwei Sachen aufgefallen:

1. Sobald ich die Phase ändern möchte, öffnet sich zwar dar Slider kurz, verschwindet dann aber sofort wieder hinter dem Hauptfenster.
Meine Lösung wäre:
Code:
% --- Executes on button press in pushbutton2.
function pushbutton2_Callback(hObject, eventdata, handles)
% hObject    handle to pushbutton2 (see GCBO)
% eventdata  reserved - to be defined in a future version of MATLAB
% handles    structure with handles and user data (see GUIDATA)

h = gui_phase;
uiwait(h);
zeichne;
 

Oder du ordnest die einzelnen Figures so an, dass die Standardpositionen so gewählt sind, dass immer alle zu sehen sind. Der Slider über und das kleine Fenster links neben dem Hauptfensters. Wink

2. Wenn ich den Bereich ändere, werden zwar die Achsen verändert, aber nicht der Bereich in dem die Funktion berechnet wird - ist das beabsichtigt?

Gruß
Alex
_________________

>> I told me to.

____________________________________
Matlab Cheat Sheet
goMatlab-Knigge - dran gehalten?!
Schon in den FAQ gesucht?
Ist vielleicht bei den Skripten oder den Tutorials was für dich dabei?
Private Nachricht senden Benutzer-Profile anzeigen
 
nschlange
Themenstarter

Ehrenmitglied

Ehrenmitglied



Beiträge: 1.320
Anmeldedatum: 06.09.07
Wohnort: NRW
Version: R2007b
     Beitrag Verfasst am: 24.09.2008, 08:14     Titel:
  Antworten mit Zitat      
Hi,

besten Dank für die Rückmeldung.

steve hat Folgendes geschrieben:

1. Sobald ich die Phase ändern möchte, öffnet sich zwar dar Slider kurz, verschwindet dann aber sofort wieder hinter dem Hauptfenster.
Meine Lösung wäre:
Code:


Oder du ordnest die einzelnen Figures so an, dass die Standardpositionen so gewählt sind, dass immer alle zu sehen sind. Der Slider über und das kleine Fenster links neben dem Hauptfensters. Wink

Ich wollte eigentlich den zweiten Weg wählen, um den 'Programmablauf' nicht zu stören. Werde es bei Zeiten ändern.
steve hat Folgendes geschrieben:

2. Wenn ich den Bereich ändere, werden zwar die Achsen verändert, aber nicht der Bereich in dem die Funktion berechnet wird - ist das beabsichtigt?
Ja, eigentlich schon, ich wollte eine primitive Zoom-Funktion schreiben.
_________________

Viele Grüße
nschlange

"Chuck Norris ejakuliert fluessigen Stahl!"
Private Nachricht senden Benutzer-Profile anzeigen E-Mail senden
 
steve
Ehrenmitglied

Ehrenmitglied



Beiträge: 2.029
Anmeldedatum: 03.09.07
Wohnort: Wien
Version: R2024a
     Beitrag Verfasst am: 24.09.2008, 10:51     Titel:
  Antworten mit Zitat      
Achso.

Naja, mit dem Programmablauf ists halt in sofern schwierig, das ich im ersten Moment den Slider garnicht gesehen hab. Der Button wurde gedrückt, aber (auf den ersten Blick) passierte nix. Das hatte mich halt verwirrt Wink

Gruß
Alex
_________________

>> I told me to.

____________________________________
Matlab Cheat Sheet
goMatlab-Knigge - dran gehalten?!
Schon in den FAQ gesucht?
Ist vielleicht bei den Skripten oder den Tutorials was für dich dabei?
Private Nachricht senden Benutzer-Profile anzeigen
 
nschlange
Themenstarter

Ehrenmitglied

Ehrenmitglied



Beiträge: 1.320
Anmeldedatum: 06.09.07
Wohnort: NRW
Version: R2007b
     Beitrag Verfasst am: 24.09.2008, 11:08     Titel:
  Antworten mit Zitat      
steve hat Folgendes geschrieben:
Achso.

Naja, mit dem Programmablauf ists halt in sofern schwierig, das ich im ersten Moment den Slider garnicht gesehen hab. Der Button wurde gedrückt, aber (auf den ersten Blick) passierte nix. Das hatte mich halt verwirrt Wink

Gruß
Alex


Verständlich, mich hat vor allem das dauernde Verschiebenmüssen genervt... Very Happy

Aber wenn ich uiwait benutze müsste ich doch vor dem Weiterarbeiten erst das Fenster schließen, oder?
_________________

Viele Grüße
nschlange

"Chuck Norris ejakuliert fluessigen Stahl!"
Private Nachricht senden Benutzer-Profile anzeigen E-Mail senden
 
steve
Ehrenmitglied

Ehrenmitglied



Beiträge: 2.029
Anmeldedatum: 03.09.07
Wohnort: Wien
Version: R2024a
     Beitrag Verfasst am: 24.09.2008, 11:15     Titel:
  Antworten mit Zitat      
Nein. Bei funktioniert alles so wie es sollte (in meinen Augen Wink )
_________________

>> I told me to.

____________________________________
Matlab Cheat Sheet
goMatlab-Knigge - dran gehalten?!
Schon in den FAQ gesucht?
Ist vielleicht bei den Skripten oder den Tutorials was für dich dabei?
Private Nachricht senden Benutzer-Profile anzeigen
 
Gusa
Forum-Anfänger

Forum-Anfänger


Beiträge: 24
Anmeldedatum: 05.10.12
Wohnort: Freising
Version: ---
     Beitrag Verfasst am: 31.10.2012, 16:26     Titel:
  Antworten mit Zitat      
Hi Leute,

hab mir das Beispiel angeguckt. Blick da leider ohne Kommentare nicht durch. setappdata und getappdata doc's in matlab sind ohne beispiele. Bin langsam am verzweifeln. Was ich machen will, ist von einer GUI edit text feld den wert an eine andere GUI static text feld uebergeben. Wie kann ich das realisieren?

Gruss,
Andi
Private Nachricht senden Benutzer-Profile anzeigen
 
Harald
Forum-Meister

Forum-Meister


Beiträge: 24.495
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 31.10.2012, 16:38     Titel:
  Antworten mit Zitat      
Hallo,

Beispiele zum Arbeiten mit Daten in GUIs gibt es u.a. hier:
Code:
docsearch('data management in a gui')


Zur Kommunikation zwischen GUIs gab es auch hier schon Anfragen; eine Suche nach setappdata sollte ein paar Treffer bringen.

Grüße,
Harald
Private Nachricht senden Benutzer-Profile anzeigen
 
MrHyde
Forum-Anfänger

Forum-Anfänger


Beiträge: 40
Anmeldedatum: 05.08.12
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 07.12.2013, 12:52     Titel: Re: GUI Daten Variablen übergeben guidata setappdata getapp
  Antworten mit Zitat      
Hallo zusammen.

Vielen Dank für das schöne Beispiel. Es hat mir eine ganze Menge gebracht. Very Happy

Einzig was ich in dem Beispiel nicht verstehe sind diese beiden Aufrufe hier:

Code:

setappdata(gcf,'myphase',0);
setappdata(gcf,'fhzeichne',@zeichne);
 


Könnte mir jemand erklären welche Funktion sie in dem Programm übernehmen?

Oder habe ich doch setappdata nicht verstanden?
Ich dachte, z.B.
Code:

setappdata(0,'hhauptfenster',gcf);
 

legt im root-Workspace eine Variable hhauptfenster mit dem Verweiswert von gcf an! Rolling Eyes

Das würde doch übersetzt für
Code:

bedeuten, dass in einem gcf-Workspace eine Variable myphase mit dem Wert 0 angelegt wird. Question Question

EDIT:
Ich habe nun einfach mal etwas weiter rumgespielt...
... scheinbar entspricht:
Code:


demhier:

Code:

hhauptfenster=getappdata(0,'hhauptfenster');
setappdata(hhauptfenster,'myphase',0);
 


Also ist offenbar die Variable myphase in dem Workspace von gcf.

Somit ändert sich meine Frage:

Warum wird myphase in gcf geschrieben und nicht in 0?
Gibt es dafür einen logischen Grund?

Kann mich bitte jemand Idea

Vielen Dank und viele Grüße
MrHyde
Private Nachricht senden Benutzer-Profile anzeigen
 
Harald
Forum-Meister

Forum-Meister


Beiträge: 24.495
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 07.12.2013, 20:29     Titel:
  Antworten mit Zitat      
Hallo,

ich verstehe nicht, was du mit deinen Versuchen bezweckst.
Die Frage kann ich aber beantworten:
Zitat:
Warum wird myphase in gcf geschrieben und nicht in 0?

Weil du dazu
Code:

schreiben müsstest.

Grüße,
Harald
Private Nachricht senden Benutzer-Profile anzeigen
 
MrHyde
Forum-Anfänger

Forum-Anfänger


Beiträge: 40
Anmeldedatum: 05.08.12
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 07.12.2013, 21:00     Titel:
  Antworten mit Zitat      
Hallo Harald,
danke für deine Rückmeldung. Was ich damit bezwecke... ich versuche die Funktionsweise von setappdata und getappdata zu verstehen.

Nein, ich möchte verstehen ob es einen bestimmten Grund dafür gab setappdata(gcf,...) zu verwenden, statt setappdata(0,...).

Lag es an bestimmten Zugriffsrechten für den Workspace oder ...

Ich als Anfänger wäre nicht auf die Idee gekommen die Variable in gcf zu schreiben. Ich hätte alles in 0 geschrieben.

Daher meine Frage. Sorry wenn diese für Euch erfahrene Matlab-Anwender seltsam rübergekommen ist. Es war in der Tat eine ernst gemeinte Frage. Embarassed

Ich hoffe daher trotzdem auf Hilfe.

Gruß
MrHyde
Private Nachricht senden Benutzer-Profile anzeigen
 
Harald
Forum-Meister

Forum-Meister


Beiträge: 24.495
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 07.12.2013, 21:22     Titel:
  Antworten mit Zitat      
Hallo,

bei setappdata geht es in erster Linie darum, Daten abzuspeichern, die mit einer bestimmten Anwendung (häufig einer GUI) in Verbindung stehen, um sie später mit getappdata wieder 'abholen' zu können. 0 ist root, also die gesamte MATLAB-Session, und steht damit nicht mit einer bestimmten Anwendung in Verbindung. Es ist also meines Erachtens relativ sinnfrei, auch nur irgendetwas in 0 zu schreiben. Da könnte man gleich globale Variablen verwenden - und dass das nicht empfohlen ist, wird an verschiedensten Stellen diskutiert.
Der Hauptanwendungsfall von getappdata/setappdata sind grafische Benutzeroberflächen, da es insbesondere bei mit GUIDE erstellten GUIs nicht einfach ist, die Daten von einem Callback in den anderen zu bekommen.
Mit Standard-Tags wäre meine Empfehlung hier:
Code:
setappdata(handles.figure1, 'meineDaten', mydata)

und später dann
Code:
mydata = getappdata(handles.figure1,'meineDaten');


Grüße,
Harald
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.