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

2 GUIs, Werte übergeben

 

leonidas

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 18.12.2008, 13:31     Titel: 2 GUIs, Werte übergeben
  Antworten mit Zitat      
Hallo zusammen!

habe zwei GUIs (leider noch mit GUIDE erstellt), die eine Gui ruft die andre auf und übergibt ihr einen struct. das funktioniert soweit, hab ich im Debug-Modus kontrolliert.
der struct wird in der zweiten GUI verändert.
Nur zurückgeben an die erste GUI krieg ich nicht hin. hab versucht in einem pushbuttonCallback den struct der ausgabevariablen zuzuweisen:
Code:
varargout{1} = handles.Ausgabe;

hab das auch schon mit runden Klammern probiert...

habe den ablauf wieder mit Debug verfolgt: erstens wird über die output_fcn nur ein gewisses handle.output ausgegeben, welches ein Handle zu sein scheint:
Code:
varargout{1} = handles.output;

wenn ich stattdessen
Code:
varargout{1} = handles.Ausgabe;
hinschreibe, dann nimmt er nicht die geänderten WErte sondern die die an diese GUI übergeben wurden.

ich versteh nicht wieso der GUIDE folgendes erstellt:
Code:
if nargout
[varargout{1:nargout}] = gui_mainfcn(gui_State, varargin{:});
else
    gui_mainfcn(gui_State, varargin{:});
end
% End initialization code - DO NOT EDIT
, denn dadurch übernimmt er ja die Eingabewerte (varargin), welche noch nichtin der GUI verändert werden konnten....
???

kennt sich da wer aus?

mfg
leonidas


outsider
Forum-Meister

Forum-Meister


Beiträge: 806
Anmeldedatum: 03.09.07
Wohnort: München
Version: R2012b
     Beitrag Verfasst am: 25.12.2008, 00:04     Titel:
  Antworten mit Zitat      
schau hier rein:
http://www.mathworks.com/support/so.....AR8.html?solution=1-1BAR8


MfG
Private Nachricht senden Benutzer-Profile anzeigen
 
leonidas
Forum-Fortgeschrittener

Forum-Fortgeschrittener


Beiträge: 52
Anmeldedatum: 22.12.08
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 30.12.2008, 14:10     Titel:
  Antworten mit Zitat      
ahhhh, diese GUIs kosten mich noch den letzten Nerv!

also hab mir den link angeschaut, vielen Dank! bin auch halb schlau draus geworden, aber nur halb. wollte die Beispieldateien im Vergleich zu meinen eigenen Dateien debuggen - da liefert mir matlab jedesmal einen Fehler! obwohl dieses Color-Plot-Programm ausserhalb des debug-modus einwandfrei läuft... ??? hab noch Version 2006a... kanns daran liegen?

grundsätzlich zum Ablauf einer GUI: ist es immer so, daß zuerst openinFcn und anschließend gleich outputFcn ausgeführt werden? außer man fügt ein uiwait oder waitfor ein?

irgendwie hat meine GUI nachdem sie mittels eines Callbacks bereits geschlossen wurde (close-Befehl), nochmal versucht die OpeningFcn zu durchlaufen und jammert dann verständlicherweise, daß irgendwas mit den inputs nicht stimmt...
vllt sollte ich auch die zweite GUI nochmal neu schreiben, da wurde schon so viel verändert...

mag jemand sein Wissen mit mir teilen? wäre nett!

LG
leonidas
Private Nachricht senden Benutzer-Profile anzeigen
 
Zuckerfreak

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 18.01.2009, 20:50     Titel:
  Antworten mit Zitat      
Servus,

ich kämpfe gerade damit Werte von einem GUI an ein anderes zu übergeben!
Eigentlich mach ich folgendes:
Mein Start-GUI (erstes GUI) liest, nach drücken des Startbuttons und auswählen eines Files, ein .txt File mit ~100 000 Werten in 2 Spalten (Zeit | Amplitude) aus und schreib die Werte in die Matrix "data". Über ein Button öffnet sich ein neues GUI, Verarbeitung-GUI (zweites GUI), in dem ich gerne wieder die Matrix "data" verwenden möchte.
Im Start-GUI kann ich die Matrix "data" z.B. als plot darstellen (also funktioniert das einlesen) aber ich bekomm es nicht gebacken im Verarbeitung-GUI "data" wieder zu verwenden... .
Ich hab mir schon einiges zu handles, guidata usw. auf englisch in der Hilfe durchgelese aber es klappt einfach nicht Sad. Gibt es vielleicht ne deutsche Hilfeseite zu dem Thema? Würde mich wirklich über nen Link dazu freuen. Es mir im Forum zu erklären ist wohl zu kompliziert. Wenn jem. ein gaaanz einfaches Beispiel hat wie man einen Wert von einem GUI in einem anderen übergibt würde das vielleicht auch helfen.

THX Zuckerfreak
 
leonidas
Forum-Fortgeschrittener

Forum-Fortgeschrittener


Beiträge: 52
Anmeldedatum: 22.12.08
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 18.01.2009, 22:50     Titel:
  Antworten mit Zitat      
Hi!
also deutschsprachig ist schwierig was zu finden, es gibt schon paar Bücher, aber bei solchen Details hören die dann meist schon auf...
hab mich auch durch die (engl) Matlab-Hilfe gequält. was ganz gut klappt, ist die Beispiel .m-files nachzuvollziehen.
also unter dem Link http://www.mathworks.com/support/so.....AR8.html?solution=1-1BAR8 ist ganz unten eine sehr einfache Methode beschrieben: Du speicherst Deine Matrix (in dem Beispiel wär das b) in einer sogenannten 'base' ab:
Code:
b=get(handles.edit2,'String');
setappdata(0,'ReturnText',b);

bei Dir müsste das in der HauptGUI sein.
Code:
'ReturnText'
ist der Name der Variablen b in base.
jetzt kannst in Deiner zweiten GUI b (allerdings heißt die jetzt ReturnText) wieder auslesen mit:

Code:
a=getappdata(0,'ReturnText')
set(handles.edit1,'String',a)


was noch wichtig sonst funktionierts nicht:

wenn Du die zweite GUI aufrufst, machst Du das so:

Code:
h = GUI2;
waitfor(h);


wobei GUI2 der Name der zweiten GUI ist (ohne .m und ohne Klammern, da Du nicht direkt was übergibst)
h ist das Handle zur GUI2, mit waitfor wartet die HauptGUI auf h, auf die zweite GUI also.

habe selber auch das mit varargin/varargout, also direkte Datenübergabe, versucht und dann sogar geschafft; kann Dir morgen bei Bedarf dieBeispieldatei senden.

kurz zu
Code:
guidata(hObject, handles)
: es lohnt sich schon mit handles zu arbeiten, man sollte die aber am besten mit dem eben erwähnten Befehl in jedem Callback, in dem handles verändert werden, speichern.

so hoffe das hilft weiter!!!
mfg
Private Nachricht senden Benutzer-Profile anzeigen
 
Zuckerfreak

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 24.01.2009, 16:36     Titel:
  Antworten mit Zitat      
Hab gerade unter der Woche kaum Zeit Sad. Deswegen muss ich am Wochenende ran Evil or Very Mad
Jetzt habe ich mit handles angefangen und das hinbekommen:

handles =

figure1: 178.0112
bsp_fft: 28.0118
bsp_signal: 23.0118
pushbutton5: 22.0118
pushbutton4: 21.0118
text2: 20.0118
checkbox_mean_Signal: 19.0118
checkbox_Rohsignal: 18.0118
pushbutton_Start: 17.0118
pushbutton_Signal_auswaehlen: 16.0118
pushbutton1: 15.0123
Infobox: 179.0112
axesData: [131072x2 double]
output: 178.0112
Das sind mal alle handles in GUI1.

Jetzt würde ich gerne axes.Data in meinem zweite GUI (GUI2) verwenden. GUI2 wir über einen Button in GUI1 geöffnet und die Werte von axesData: [131072x2 double] sollen in ein Diagramm von GUI2 geschrieben werden. Dafür habe ich versucht in der OpeningFCN axes.data aufzurufen. Es kommt die Fehlermeldung: ??? Reference to non-existent field 'axesData'.. Ich hab ein wenig mit get und handles rumprobiert aber nischt!
Bitte: Kann mir jemand den Befehl nenne mit dem ich axes.Data in meinem zweiten GUI (GUI2) aufrufen kann?
Die GUIs habe ich mit guide und Version 7.5.0.342 (R2007b) erstellt

THX Zuckerfreak
 
Maddy
Ehrenmitglied

Ehrenmitglied



Beiträge: 494
Anmeldedatum: 02.10.08
Wohnort: Greifswald
Version: ---
     Beitrag Verfasst am: 24.01.2009, 18:46     Titel:
  Antworten mit Zitat      
wenn du schon die handles Struktur hast und du willst die Unterstruktur axesData haben, dann solltest du auch mit
Code:

handles.axesData
 

drauf zugreifen können.
_________________

>> why
The computer did it.
Private Nachricht senden Benutzer-Profile anzeigen
 
Zuckerfreak

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 26.01.2009, 22:24     Titel:
  Antworten mit Zitat      
ES GEHT NICHT Evil or Very Mad
Ich bin ganz eindeutig zu doof!

Also ich versuch immer noch eine Matrix von einem GUI (GUI1) an ein anderes GUI (Gui2) zu übergeben. Die Matrix wird durch knopfdrücken des Button "Start" in GUI1 erstellt und in handles.axesData gespeichert. Der Button "Gui2" in GUI1 ruft das zweite GUI, Gui2, auf. In Gui2 sollen durch drücken des Button "go" die Werte von handles.axesData geplottet werden ... Ich bekomm es nicht hin in Gui2 die in handles.axesData gspeicherten Werte aufzurufen Embarassed
(Der Button "plot" in GUI1 ist nur da um zu sehen, ob die Werte auch in handles.axesData gespeichert werden)
Was muss ich machen oder was mach ich falsch?
Ich häng meinen Code einfach mal hier dran. Ist viel aber vielleicht ist es dann verständlicher ... Die Standardkommentare habe ich rausgelöscht, dafür eigene eingefügt.
PLZ help
THX Zuckerfreak



Code:
function varargout = GUI1(varargin)
% GUI1 M-file for GUI1.fig

% Begin initialization code - DO NOT EDIT
gui_Singleton = 1;
gui_State = struct('gui_Name',       mfilename, ...
                   'gui_Singleton',  gui_Singleton, ...
                   'gui_OpeningFcn', @GUI1_OpeningFcn, ...
                   'gui_OutputFcn',  @GUI1_OutputFcn, ...
                   'gui_LayoutFcn',  [] , ...
                   'gui_Callback',   []);
if nargin && ischar(varargin{1})
    gui_State.gui_Callback = str2func(varargin{1});
end

if nargout
    [varargout{1:nargout}] = gui_mainfcn(gui_State, varargin{:});
else
    gui_mainfcn(gui_State, varargin{:});
end
% End initialization code - DO NOT EDIT

function GUI1_OpeningFcn(hObject, eventdata, handles, varargin)

handles.axesData = [];

handles.output = hObject;
guidata(hObject, handles);



function varargout = GUI1_OutputFcn(hObject, eventdata, handles)
varargout{1} = handles.output;

% Dieser Button speichert Werte in handles.axes.Data
function Start_Callback(hObject, eventdata, handles)
handles.axesData = [1:100;rand(1,100)]';
guidata (hObject, handles);

% Dieser Button ruft Gui2
function Gui2_Callback(hObject, eventdata, handles)
h = Gui2;
waitfor (h); % Was bringt das?

% Mit diesem Button kann man überprüfen ob handles.axesData die Werte speichert
function plot_Callback(hObject, eventdata, handles)
data= handles.axesData;
figure
plot (data(:,1), data(:,2));
title('\bf gewähltes Signal')
xlabel('Zeit [s]')
ylabel('Amplitude')


Code:
function varargout = Gui2(varargin)
% GUI2 M-file for Gui2.fig

% Begin initialization code - DO NOT EDIT
gui_Singleton = 1;
gui_State = struct('gui_Name',       mfilename, ...
                   'gui_Singleton',  gui_Singleton, ...
                   'gui_OpeningFcn', @Gui2_OpeningFcn, ...
                   'gui_OutputFcn',  @Gui2_OutputFcn, ...
                   'gui_LayoutFcn',  [] , ...
                   'gui_Callback',   []);
if nargin && ischar(varargin{1})
    gui_State.gui_Callback = str2func(varargin{1});
end

if nargout
    [varargout{1:nargout}] = gui_mainfcn(gui_State, varargin{:});
else
    gui_mainfcn(gui_State, varargin{:});
end
% End initialization code - DO NOT EDIT


function Gui2_OpeningFcn(hObject, eventdata, handles, varargin)
handles.output = hObject;
guidata(hObject, handles);

function varargout = Gui2_OutputFcn(hObject, eventdata, handles)
varargout{1} = handles.output;

function go_Callback(hObject, eventdata, handles)
data = handles.axesData;
guidata(hObject, handles);
figure
plot (data(:,1), data(:,2));
title('\bf Signal')
xlabel('Zeit [s]')
ylabel('Amplitude')
 
leonidas
Forum-Fortgeschrittener

Forum-Fortgeschrittener


Beiträge: 52
Anmeldedatum: 22.12.08
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 27.01.2009, 10:25     Titel:
  Antworten mit Zitat      
also so wie Du das machst, kann es nicht funktionieren...
wenn Du mit handles.Axes in GUI2 argbeiten willst mußt Du diese auch übergeben.
das könnte so aussehen (GUI1):
Code:
GUI2(handle.Axes)

in GUI2 (die hat eine eigene handles-STruktur, die nur für GUI2 sichtbar ist!!) mußt Du dann die übergebenen Werte auffangen in der OpeningFcn:
Code:
handles.Axes_geholt = varargin{1};

jetzt solltest Du handles.Axes_geholt verwenden können... der Name ist egal, ich würd aber einen anderen als in GUI1 verwenden, deshalb damit Du nicht durcheinanderkommst zwischen den beiden GUIs.

Da ich auch ziemlich lang rumgekämpft hab mit diesem Thema, das aber schon wieder ein paar Wochen her ist, und ich nicht sicher bin, ob ich alles notwendige geschrieben hab sende ich Dir jetzt noch zwei einfache Beispiele mit.

GUIB.zip beschreibt die Möglichkeit mit handles-Übergabe...

das waitfor, das Du in Deinem Code verwendest, brauchst Du bei der anderen Methode, welche eigentlich einfacher ist:
diese ist in GUI1.zip beschrieben. Achte hierbei auf appdata und setdata...
hoffe das hilft weiter! bei Fragen einfach melden!
mfg leonidas

GUI1.zip
 Beschreibung:

Download
 Dateiname:  GUI1.zip
 Dateigröße:  6.09 KB
 Heruntergeladen:  1036 mal
GUIB.zip
 Beschreibung:

Download
 Dateiname:  GUIB.zip
 Dateigröße:  6.35 KB
 Heruntergeladen:  1012 mal
Private Nachricht senden Benutzer-Profile anzeigen
 
Zuckerfreak

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 28.01.2009, 23:46     Titel: 8)
  Antworten mit Zitat      
Unglaublich aber wahr!
Ich habe es geschafft Daten zwischen GUI's auszutauschen Smile

Vielen Dank Leo

n8 Zuckerfreak

P.S. vielleicht kann man die Beispiele von leonidas in die "How2" aufnehmen!
 
leonidas
Forum-Fortgeschrittener

Forum-Fortgeschrittener


Beiträge: 52
Anmeldedatum: 22.12.08
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 29.01.2009, 12:22     Titel:
  Antworten mit Zitat      
hehe, freut mich! zuviel der Ehre!
lg leonidas
Private Nachricht senden Benutzer-Profile anzeigen
 
michai
Forum-Fortgeschrittener

Forum-Fortgeschrittener


Beiträge: 83
Anmeldedatum: 22.02.10
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 15.03.2010, 08:20     Titel:
  Antworten mit Zitat      
Sorry, wenn ich hier rumnerve und damit den Fred wieder hochhole, aber der Link http://www.mathworks.com/support/so.....AR8.html?solution=1-1BAR8 tuts nicht mehr.
Hat jemand den Inhalt der Seite gespeichert oder kennt jemand den jetzt aktuellen Link zu den Inhalten?
Private Nachricht senden Benutzer-Profile anzeigen
 
leonidas
Forum-Fortgeschrittener

Forum-Fortgeschrittener


Beiträge: 52
Anmeldedatum: 22.12.08
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 15.03.2010, 15:07     Titel: gui-link
  Antworten mit Zitat      
Hi michai!

hab mal kurz geschaut, scheinbar gibts die Beispiele für die alten Versionen von Simulink nicht mehr...
hier findest Du die Bsp vom neuen Simulink: http://www.mathworks.com/access/hel.....ting_guis/f3-1001115.html
einfach mal probieren, mußt mal bissl durchblättern! glaube hab damals mit diesem Bsp gearbeitet... ganz unten von der Seite kann man sich den Quelcode downloaden.
im übrigen kannst ja auch die Beispiele die ich mal hochgeladen hab anschauen, da habe ich mein ganzes Wissen reingelegt Wink
viel Erfolg!
leonidas
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 - 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.