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

Datenaustausch zwischen GUIs

 

stealth_mx
Forum-Fortgeschrittener

Forum-Fortgeschrittener


Beiträge: 94
Anmeldedatum: 15.06.13
Wohnort: ---
Version: 2013b
     Beitrag Verfasst am: 15.06.2013, 14:38     Titel: Datenaustausch zwischen GUIs
  Antworten mit Zitat      
Hallo zusammen bin neu hier.

Ich bin ein Anfänger auf dem Gebiet und habe eine Frage.
Ich habe eine GUI 1 erstellt in der soll eine Animation ablaufen. Dort möchte ich über ein Menu auf eine weitere GUI zugreifen um dort Parameter einzugeben. Sind nur Zahlenwert. Die zweite GUI habe ich auch grafisch erstellt und als x.fig abgespeichert. Ich rufe im Menu der ersten GUI die zweite mit uiwait(x.fig) auf und habe im vorfeld der GUI 2 die Option modal verpasst, sodass sie im Vordergund ist. Nachdem ich meine Parameter in die zweite GUI geschrieben habe möchte ich das Fenster einfach schließen und dass die Parameter nun auch in der ersten GUI bereit stehen. Das schließen mache ich mit close(x.fig). Aber ich weiß leider nicht genau wie ich die Parameter richtig übergen kann.

Ich hoffe ihr könnt mir helfen
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: 15.06.2013, 16:29     Titel:
  Antworten mit Zitat      
Hallo,

in der 2. GUI die Parameter in der OutputFcn als Rückgabeparameter definieren, und die 2. GUI aus der 1. GUI heraus mit diesem Argument aufrufen.

Grüße,
Harald
Private Nachricht senden Benutzer-Profile anzeigen
 
stealth_mx
Themenstarter

Forum-Fortgeschrittener

Forum-Fortgeschrittener


Beiträge: 94
Anmeldedatum: 15.06.13
Wohnort: ---
Version: 2013b
     Beitrag Verfasst am: 15.06.2013, 17:17     Titel:
  Antworten mit Zitat      
Hi, hast du dafür auch zufällig ein minimal Beispiel? Ich weiß zwar ungefähr was du meinst kann es aber nicht umsetzen Question
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: 15.06.2013, 18:02     Titel:
  Antworten mit Zitat      
Hallo,

nicht bei der Hand. Vielleicht können wir ja von deinem Beispiel (ggf. auf das wesentliche abgespeckt) ausgehen.

Grüße,
Harald
Private Nachricht senden Benutzer-Profile anzeigen
 
stealth_mx
Themenstarter

Forum-Fortgeschrittener

Forum-Fortgeschrittener


Beiträge: 94
Anmeldedatum: 15.06.13
Wohnort: ---
Version: 2013b
     Beitrag Verfasst am: 15.06.2013, 18:27     Titel:
  Antworten mit Zitat      
OK gerne:
also als erstes starte ich meine "Option" in dem ersten GUI(function varargout = haupt(varargin)) mit uiwait. Hier fehlt ja jetzt theoretisch der Empfang von den ankommenden Argumenten.

Code:

function menu_menu_1_Callback(hObject, eventdata, handles)
uiwait(option)
 



Zu GUI zwei, dort lese ich über eine editierbare Box viele Werte ein (nur zahlen) ich speichere sie in Arrays, Vektoren und Skalaren, Dieses geschieht wenn ich auf den einzigen Button klicke der dort existieren soll.:

Code:

function knopfdruck_Callback(hObject, eventdata, handles)

testwert(1)=str2num(get(handles.m1,'String'));
....hier kommen dann paar zeilen...
close(option)
 


Die Deklaration von "testwert" habe ich einfach zwischen den Funktionen gemacht ich hoffe es geht so. Jetzt muss ich sie irgendwie an an varargout übergeben denke ich.

Verstehe ich es richtig, wenn ich dieses Fenster schließe und dann meine erste GUI wieder geöffnet wird (die im Grunde wartet wegen uiwait), dass dann sich die Argumente in varargin befinden werden?

Code:
function varargout = option_OutputFcn(hObject, eventdata, handles)

varargout{1} = handles.output;
 
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: 15.06.2013, 19:09     Titel:
  Antworten mit Zitat      
Hallo,

einfacher wäre es mit einem soweit lauffähigen Beispiel. Dann könnte ich sicher sein, dass es funktioniert. Aber ich werds mal "blind" versuchen:

Code:
function menu_menu_1_Callback(hObject, eventdata, handles)
arg = option;


uiwait sollte stattdessen in die OpeningFcn von option.
Code:

function knopfdruck_Callback(hObject, eventdata, handles)

testwert(1)=str2num(get(handles.m1,'String'));
uiresume(handles.figure1) % oder was auch immer das Handle auf die GUI an sich ist.
% close(option) <-- nicht hier, sonst kein geordneter Abschluss


In der Output Function dann
Code:
function varargout = option_OutputFcn(hObject, eventdata, handles)

varargout{1} = % das, was zurückgegeben werden soll
close(handles.figure1)



Grüße,
Harald
Private Nachricht senden Benutzer-Profile anzeigen
 
stealth_mx
Themenstarter

Forum-Fortgeschrittener

Forum-Fortgeschrittener


Beiträge: 94
Anmeldedatum: 15.06.13
Wohnort: ---
Version: 2013b
     Beitrag Verfasst am: 15.06.2013, 21:19     Titel:
  Antworten mit Zitat      
Hmm, leider stimmt da was nicht. Ich habe deswegen ein Minimalbeispiel erstellt, wenn ich es da verstanden habe dann kann ich es meins übertragen. Könntest du es dir vielleicht angucken? Leider weiß nicht nicht wie ich den gesamten Quellcode bekomme also auch von der .fig datei sodass man nicht extra sie mitschicken muss.

Ehrlich gesagt versteht ich nicht genau den Ablauf des Programms. Ich starte meine Hauptfunktion von dort aus starte ich dann ein weiteres Fenster. Vor dem öffnen des neuen Fensters wird die OpeningMethode aufgerufen (dort muss also uiwait(kommt hier das Hauptfenster rein oder das neu geöffnete?) stehen). Nachdem ich nun damit gearbeitet habe und es schließen möchte wird die OutputMethode des neuen Aufgerufen und dort muss uiresume stehen.? Verstehe ich es richtig?

beispiel.rar
 Beschreibung:

Download
 Dateiname:  beispiel.rar
 Dateigröße:  5.45 KB
 Heruntergeladen:  343 mal
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: 15.06.2013, 21:53     Titel:
  Antworten mit Zitat      
Hallo,

Zitat:
Leider weiß nicht nicht wie ich den gesamten Quellcode bekomme also auch von der .fig datei sodass man nicht extra sie mitschicken muss.

Das ist schon so gedacht und so in Ordnung.

Zitat:
Nachdem ich nun damit gearbeitet habe und es schließen möchte wird die OutputMethode des neuen Aufgerufen und dort muss uiresume stehen.?

Fast. Die OutputFcn wird erst ausgeführt, wenn das uiresume kommt (das uiwait sorgt dafür, dass die Eingabe-GUI nciht sofort beendet wird). Deswegen das uiresume in den Callback, damit nach Abschluss des Callbacks die OutputFcn ausgeführt wird, in der die Werte zurückgegeben und die Eingabe-GUI geschlossen wird.

Grüße,
Harald

beispiel.zip
 Beschreibung:

Download
 Dateiname:  beispiel.zip
 Dateigröße:  5.72 KB
 Heruntergeladen:  344 mal
Private Nachricht senden Benutzer-Profile anzeigen
 
stealth_mx
Themenstarter

Forum-Fortgeschrittener

Forum-Fortgeschrittener


Beiträge: 94
Anmeldedatum: 15.06.13
Wohnort: ---
Version: 2013b
     Beitrag Verfasst am: 15.06.2013, 22:25     Titel:
  Antworten mit Zitat      
HI, danke schön, kann schon mehr nachvollziehen. Ist das "handles" sowas wie ein "this" aus anderen Sprachen?

Und was bedeutet das handles.figure1. Ich dachte das ich dort einfach den Objekt namen eintragen kann der dann geschlossen bzw gehalten wird.

Jetzt habe ich ja dieses arg, was auf den Wert beinhaltet aber wie kann ich den übergebenen String auslesen?

Sorry für so viele Fragen! Sad
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: 15.06.2013, 22:52     Titel:
  Antworten mit Zitat      
Hallo,

handles ist eine Struktur mit Handles (Verweisen) auf alle GUI-Elemente. Die Felder der Struktur sind die Tags der entsprechenden Elemente.

Das Tag der GUI an sich ist standardmäßig figure1.

Zitat:
was auf den Wert beinhaltet aber wie kann ich den übergebenen String auslesen?

Was ist der Unterschied zwischen dem "Wert" und dem "übergebenen String"?

Grüße,
Harald
Private Nachricht senden Benutzer-Profile anzeigen
 
stealth_mx
Themenstarter

Forum-Fortgeschrittener

Forum-Fortgeschrittener


Beiträge: 94
Anmeldedatum: 15.06.13
Wohnort: ---
Version: 2013b
     Beitrag Verfasst am: 16.06.2013, 15:00     Titel:
  Antworten mit Zitat      
Ok danke klappt alles!
Private Nachricht senden Benutzer-Profile anzeigen
 
stealth_mx
Themenstarter

Forum-Fortgeschrittener

Forum-Fortgeschrittener


Beiträge: 94
Anmeldedatum: 15.06.13
Wohnort: ---
Version: 2013b
     Beitrag Verfasst am: 21.06.2013, 22:55     Titel:
  Antworten mit Zitat      
Hallo, habe ein weiteres Problem, wenn ich das "unter" GUI öffne, also die Option dann kann ich dort ja meine Parameter festsetzen und wenn ich auf den Button drücke dann schließt er es richtig und übergibt die Parameter an die "Eltern". Wenn man aber oben auf das x (Schließen) in der Option klickt, dann kommt ein Fehler. Wie ich gelesen habe muss ich die closeFunction modifizieren.

http://www.mathworks.de/de/help/mat.....rops.html#CloseRequestFcn

Habe mich etwas an dieses hier gehalten, allerdings konnte ich dann nichts mehr schließen. Ich möchte, wenn man auf das x klickt, einfach genau das gleiche machen wie beim Button auch. Einfach alle Parameter einlesen und sie übergeben.

So sieht meine CloseFunction aus:
Code:

function figure1_CloseRequestFcn(hObject, eventdata, handles)
delete(hObject);
 


Ich habe den Ablauf noch nicht ganz verstanden. Greift der beim Button(zum beenden) in dem folgendes steht:
Code:
function knopfdruck_Callback(hObject, eventdata, handles)
%Setzte fort
uiresume(handles.figure1);
auch auf die CloseFcn zu? Oder wird die CloseFcn nur beim Beenden über das X aufgerufen?
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: 23.06.2013, 13:31     Titel:
  Antworten mit Zitat      
Hallo,

Zitat:
Wenn man aber oben auf das x (Schließen) in der Option klickt, dann kommt ein Fehler.

Und wie lautet die Fehlermeldung?

Zitat:
So sieht meine CloseFunction aus: [...]

Das bringt ja aber gerade nichts, da es ohnehin das Standardverhalten ist.

Wenn beim Schließen das Gleiche gemacht werden soll wie beim Button, dann musst du in der CloseRequestFcn schon dafür sorgen, dass der selbe Code ausgeführt wird.

Zitat:
Greift der beim Button(zum beenden) in dem folgendes steht:

Nein, warum auch? Woher soll MATLAB denn wissen, dass dieser Button zum Schließen gedacht ist?

Zitat:
Oder wird die CloseFcn nur beim Beenden über das X aufgerufen?

Wann die CloseRequestFcn ausgeführt wird, steht in deinem Link beschrieben.

Grüße,
Harald
Private Nachricht senden Benutzer-Profile anzeigen
 
stealth_mx
Themenstarter

Forum-Fortgeschrittener

Forum-Fortgeschrittener


Beiträge: 94
Anmeldedatum: 15.06.13
Wohnort: ---
Version: 2013b
     Beitrag Verfasst am: 23.06.2013, 14:20     Titel:
  Antworten mit Zitat      
Hallo, das ist der Fehler: handles.m1 sind einfach edit Text, in die ich etwas eingeben kann.

Code:

Attempt to reference field of non-structure array.

Error in option>option_OutputFcn (line 42)
handles.masse(1)=str2double(get(handles.m1,'String'));

Error in gui_mainfcn (line 263)
        [varargout{1:nargout}] = feval(gui_State.gui_OutputFcn, gui_hFigure, [], gui_Handles);

Error in option (line 14)
    [varargout{1:nargout}] = gui_mainfcn(gui_State, varargin{:});

Error in haupt>menu_menu_1_Callback (line 61)
[A,B,C,D,E,F]=option;

Error in gui_mainfcn (line 96)
        feval(varargin{:});

Error in haupt (line 16)
    gui_mainfcn(gui_State, varargin{:});

Error in @(hObject,eventdata)haupt('menu_menu_1_Callback',hObject,eventdata,guidata(hObject))

 
Error while evaluating uimenu Callback


Also aus der Option GUI empfange ich die Parameter A - F in der "haupt" mit der ich auch die Option öffne.

Die OutputFCN aus Option sieht so aus:

Code:

function varargout = option_OutputFcn(hObject, eventdata, handles)
handles.masse(1)=str2double(get(handles.m1,'String'));
...

varargout{1} = handles.masse;
...

close(handles.figure1);
 


Ich habe festgestellt, dass die figure1_CloseRequestFcn immer ganz am Ende kommt. Ich dachte mir wenn ich Option starte, dann hält er sozusagen das Progamm (uiwait) bis ich auf den Button klicke (uiresume), dann springt er in die Output Funktion bis er auf close trifft. Und erst dann auf die figure1_CloseRequestFcn. Jetzt weiß ich leider nicht genau wo ich eingreifen soll.
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: 23.06.2013, 15:39     Titel:
  Antworten mit Zitat      
Hallo,

in welcher GUI ist m1 denn? Möglicherweise in der anderen? Du kannst nur innerhalb einer GUI auf die Daten zugreifen, ansonsten musst du sie übergeben.

Grüße,
Harald
Private Nachricht senden Benutzer-Profile anzeigen
 
Neues Thema eröffnen Neue Antwort erstellen

Gehe zu Seite 1, 2  Weiter

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 - 2025 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.