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

Eingaben aus GUI speichern und übergeben über Outputfunkti

 

mat_han
Forum-Newbie

Forum-Newbie


Beiträge: 7
Anmeldedatum: 08.09.08
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 08.09.2008, 09:26     Titel: Eingaben aus GUI speichern und übergeben über Outputfunkti
  Antworten mit Zitat      
Hallo,
ich möchte die eingegebenen Daten aus einem GUI übergeben. Diese Daten werden aber nicht gespeichert - lediglich die Voreinstellungen aus der Opening-Function. Nun habe ich versucht, diese Einstellungen mit guidata zu speichern und über uiwait die Eingabedaten des Benutzers zu speichern, um diese so an die Output-Funktion übergeben zu können. Das funktioniert aber leider auch nicht.

Kann mir jemand helfen, wie beispielsweise die Eingabe eines Namens gespeichert und an das GUI, in dem es aufgerufen wird, übergeben werden kann?
... hab in dem Forum dazu bisher nichts gefunden Sad
Vielen Dank
Private Nachricht senden Benutzer-Profile anzeigen


steve
Ehrenmitglied

Ehrenmitglied



Beiträge: 2.029
Anmeldedatum: 03.09.07
Wohnort: Wien
Version: R2024a
     Beitrag Verfasst am: 08.09.2008, 16:00     Titel:
  Antworten mit Zitat      
Moin,

du musst in der aufrufenden Funktion auch die Variablen angeben:
Code:
[a,b] = gui_aufruf;
 

Ansonsten poste doch einfach mal deine Codes - Anhand derer lässt sich dein Problem bestimmt schneller lösen!

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
 
mat_han
Themenstarter

Forum-Newbie

Forum-Newbie


Beiträge: 7
Anmeldedatum: 08.09.08
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 08.09.2008, 16:16     Titel:
  Antworten mit Zitat      
hallo,

ja, ich würde die datei mit rückgabeparameter aufrufen. mein problem ist allerdings eher, dass ich zunächst die voreinstellung in der opening-funktion lade, das speichere (damit es erscheint), dann das gui ausführen lasse, der benutzer eingaben machen soll. diese werden aber trotz guidata, uiwait und uiresume nicht gespeichert! im anhang befindet sich der quellcode (stark gekürzt).. hängt das mit der close-funktion zusammen?

würde mich sehr freuen, wenn das klappen würde ...

quellcode.m
 Beschreibung:

Download
 Dateiname:  quellcode.m
 Dateigröße:  2.99 KB
 Heruntergeladen:  1003 mal
Private Nachricht senden Benutzer-Profile anzeigen
 
mat_han
Themenstarter

Forum-Newbie

Forum-Newbie


Beiträge: 7
Anmeldedatum: 08.09.08
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 09.09.2008, 07:35     Titel:
  Antworten mit Zitat      
hallo nochmal,

also, ich habe die debug-funktion benutzt. derzufolge sind alle daten (also mit guidata gespeicherte benutzereingaben) nach uiresume noch vorhanden.
dann springt die funktion ja zurück in die opening-funktion (wenn dort noch befehle, wzb disp('hier'), hinter uiwait auftauchen) und schliesslich in die output-funktion. aber schon bei der opening-funktion sind nur noch die voreinstellungen (VOR dem uiwait, aber nicht die benutzereingaben) vorhanden Sad.
hilfe! wohin gehen die daten verloren? auch mit einem weiteren guidata(hObject, handles) hinter uiresume ist nichts zu retten.

über hilfe würde ich sehr freuen!
Private Nachricht senden Benutzer-Profile anzeigen
 
steve
Ehrenmitglied

Ehrenmitglied



Beiträge: 2.029
Anmeldedatum: 03.09.07
Wohnort: Wien
Version: R2024a
     Beitrag Verfasst am: 09.09.2008, 11:51     Titel:
  Antworten mit Zitat      
Moin,

wie willst du denn auf die Benutzereingaben zugreifen? In der gleichen GUI oder in einer anderen (also auch eine andere Funktion)?

Irgendwie bin ich bei deinem Problem noch nicht durchgestiegen...

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
 
mat_han
Themenstarter

Forum-Newbie

Forum-Newbie


Beiträge: 7
Anmeldedatum: 08.09.08
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 09.09.2008, 12:08     Titel:
  Antworten mit Zitat      
Hmm,

entschuldigung. Also, ich möchte das gui in einem anderen aufrufen (etwa so: benutzereingabedaten=aufruf_gui). Ich hab aber nun das Problem, dass die Benutzerdaten nicht zurückgegeben werden.
Und zwar schon innerhalb des aufruf_gui's, wo sie meines Erachtens nach uiwait an die Opening- und dann an die Output-Funktion übergeben werden MÜSSTEN, damit sie so dann weiter an das andere gui gegeben werden könnten. Ich definiere also Voreinstellungen in der Opening-Funktion, speichere sie mit guidata, lasse dann über uiwait den Benutzer Eingaben machen (auch mit guidata gespeichert), die dann mit uiresume (Eingabedaten auch nach uiresume noch vorhanden) meiner Meinung nach über die Opening-Funktion (hier sind sie weg!) wieder zurückgegeben werden müssten.
Ist das so verständlich oder beschreibe ich das etwas zu kompliziert?
Vielen Dank für die Mühe!

Gruß
Conni
Private Nachricht senden Benutzer-Profile anzeigen
 
steve
Ehrenmitglied

Ehrenmitglied



Beiträge: 2.029
Anmeldedatum: 03.09.07
Wohnort: Wien
Version: R2024a
     Beitrag Verfasst am: 09.09.2008, 16:47     Titel:
  Antworten mit Zitat      
Moin,

also... Smile

Der Schlüssel zur Lösung befindet sich hier:
Code:
function varargout = datasheet_OutputFcn(hObject, eventdata, handles)
% varargout  cell array for returning output args (see VARARGOUT);

varargout{1} = handles;
varargout{2} = handles.output;

Zur Erläuterung:
Code:
belegt die erste output-Variable mit der handles-Struktur.
Code:
belegt die zweite output-Variable mit dem Inhalt von handles.output.
Um an diese Werte zu kommen müsstest du z.B.
Code:
[h,output] = datasheet;
eingeben.

Jetzt musst du "nur noch" die entsprechenden Variablen in der einen GUI als Output deklarieren, oder weitere Elemente definieren:
Code:
varargout{3} = nocheinevariable;

Zugriff bekommst du dann wieder analog zu oben:
Code:
[h,output,var_gui2] = datasheet;
display(var_gui2); % jetzt sollte der Inhalt von 'nocheinevariable' im Command window angezeigt werden
eingeben.

Ich hoffe das hilft dir ein wenig weiter...

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
 
mat_han
Themenstarter

Forum-Newbie

Forum-Newbie


Beiträge: 7
Anmeldedatum: 08.09.08
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 11.09.2008, 07:24     Titel:
  Antworten mit Zitat      
Hey Alex,

vielen Dank, habe mir das gerade angesehen. Funktioniert nun alles ganz wunderbar!

Gruß Conni
Private Nachricht senden Benutzer-Profile anzeigen
 
Torsten23__

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 10.07.2011, 14:03     Titel:
  Antworten mit Zitat      
irgendwie hab ich hier das gleiche Problem, und schaffe es nicht zu lösen...

also das Problem nochmal in Kürze

1) ich starte in einem Skript eine GUI... und möchte als Rückgabewerte bestimmte Werte die ich in der GUI festlege

also [h,output] = concreate;

2) output soll bzw. ist eine struktur die danach ein paar Parameter enthaltens soll

eigentlich hätte ich gemeint es so zu machen wie in dem Thread vorgeschlagen...

Viele Grüße

Torsten

concreate.m
 Beschreibung:

Download
 Dateiname:  concreate.m
 Dateigröße:  5.27 KB
 Heruntergeladen:  574 mal
 
Marco H.
Forum-Guru

Forum-Guru


Beiträge: 404
Anmeldedatum: 12.11.10
Wohnort: Dortmund
Version: 2010a/2012b
     Beitrag Verfasst am: 10.07.2011, 14:57     Titel:
  Antworten mit Zitat      
Hey,
also du könntest es wie folgt machen:
Code:

% letzte Zeile Opening_Fcn
uiwait(hObject);

% eine z.B. Close request fcn definieren
function figure1_CloseRequestFcn(hObject, eventdata, handles)
uiresume(hObject)

% in deiner Output_fcn Parameter übergeben und figure löschen
function varargout = untitled_OutputFcn(hObject, eventdata, handles)
varargout{1} = handles.DeineParameter1;
varargout{2} = handles.DeineParameter2;
delete(hObject);
 


MfG Marco
Private Nachricht senden Benutzer-Profile anzeigen
 
__Torsten23__

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 10.07.2011, 15:22     Titel:
  Antworten mit Zitat      
mein Code sieht nun wie folgt aus

Code:


function varargout = concreate(varargin)

% Begin initialization code - DO NOT EDIT
gui_Singleton = 1;
gui_State = struct('gui_Name',       mfilename, ...
                   'gui_Singleton',  gui_Singleton, ...
                   'gui_OpeningFcn', @concreate_OpeningFcn, ...
                   'gui_OutputFcn',  @concreate_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 concreate_OpeningFcn(hObject, eventdata, handles, varargin)

handles.output = hObject;
handles.output.total1=1;
handles.output.total2=2;

uiwait(hObject);

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

delete(hObject);


function var_value1_Callback(hObject, eventdata, handles)
a = get(handles.var_value1,'String');
handles.output.total1 = a+10

guidata(hObject, handles);

function var_value1_CreateFcn(hObject, eventdata, handles)
if ispc && isequal(get(hObject,'BackgroundColor'), get(0,'defaultUicontrolBackgroundColor'))
    set(hObject,'BackgroundColor','white');
end

function var_value2_Callback(hObject, eventdata, handles)
a = get(handles.var_value2,'String');
handles.output.total2 = a+10

guidata(hObject, handles);

function var_value2_CreateFcn(hObject, eventdata, handles)
if ispc && isequal(get(hObject,'BackgroundColor'), get(0,'defaultUicontrolBackgroundColor'))
    set(hObject,'BackgroundColor','white');
end

function Closesave_Callback(hObject, eventdata, handles)
uiresume(hObject)


 
 
__Torsten23__

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 10.07.2011, 15:25     Titel:
  Antworten mit Zitat      
allerdings bricht das Program mit folgenden Fehler ab. Es kann ja eigentlich nicht so schwer sein,... aber irgendwie


??? Error using ==> uiresume at 24
Input argument must be of type dialog

Error in ==> concreate>Closesave_Callback at 60
uiresume(hObject)

Error in ==> gui_mainfcn at 96
feval(varargin{:});

Error in ==> concreate at 18
gui_mainfcn(gui_State, varargin{:});

Error in ==>
@(hObject,eventdata)concreate('Closesave_Callback',hObject,eventdata,guidata(hObject))


??? Error using ==> waitfor
Error while evaluating uicontrol Callback
 
Marco H.
Forum-Guru

Forum-Guru


Beiträge: 404
Anmeldedatum: 12.11.10
Wohnort: Dortmund
Version: 2010a/2012b
     Beitrag Verfasst am: 10.07.2011, 17:05     Titel:
  Antworten mit Zitat      
Hey,

uiresume kannst du auch nur handles vom Typ figure übergeben. Ich denke dein Closesave_Callback ist von einem uicontrol oder? Du kannst auch uiresume oder uiresume(gcf) benutzen bzw. uiresume(handles.DeinFigureTag)... Dann sollte es funktionieren...

MfG Marco
Private Nachricht senden Benutzer-Profile anzeigen
 
JohnnyChoclate
Forum-Anfänger

Forum-Anfänger


Beiträge: 20
Anmeldedatum: 18.02.14
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 23.09.2015, 13:43     Titel:
  Antworten mit Zitat      
Hallo zusammen,

ich habe ein identisches Problem und checke es leider nicht. Bei mir geht es um zwei GUI in dem ich in der Haupt GUI's die Werte in der opening_fcn vorbelege.
Code:

function Gebrauchstauglichkeit_OpeningFcn(hObject, eventdata, handles, varargin)
% -------
% default Werte hier als Beispiel ein popup_menu
set(handles.Berechnungsverfahren_Gebrauchstauglichkeit,'String',{'Hamm' , 'EC 5'});
set(handles.Berechnungsverfahren_Gebrauchstauglichkeit,'Value',1);
% Choose default command line output for Gebrauchstauglichkeit
handles.output = hObject;

% Update handles structure
guidata(hObject, handles);
 


anschließend gehe ich das GUI durch und wenn jemand ein eigenes Bauteil eingeben will, möchte ich ein GUI Eingabefenster öffnen. Dies mache ich mit hiermit
Code:


 Eingabe_Ergebnisse = Eingabefenster_Traegerplatten;  

 
 

und ich stoppe das GUI in der opening-Funktion der zweiten GUI.
Code:
function Eingabefenster_Traegerplatten_OpeningFcn(hObject, eventdata, handles, varargin)
uiwait(Gebrauchstauglichkeit);

In der neuen GUI sind nur Edit's bei denen ich mir die Werte zurückgeben lasse.
Code:

function varargout = Eingabefenster_Traegerplatten_OutputFcn(hObject, eventdata, handles)
varargout{1} = handles.Plattendicke;
 
 

und am Ende besitze ich einen Close_button
Code:

function close_GUI_Callback(hObject, eventdata, handles)
uiresume(Gebrauchstauglichkeit);
close(Eingabefenster_Traegerplatten);
 



Als Fehlermeldung bekomme ich immer wieder einen Befehl:

Code:

Error using set
Value must be a handle
Error in Gebrauchstauglichkeit>Gebrauchstauglichkeit_OpeningFcn (line 69)
set(handles.Berechnungsverfahren_Gebrauchstauglichkeit,'String',{'Hamm' , 'EC 5'});
 


Was mir sagt das im HauptGUI die opening_fcn nochmals durchlaufen wird. Meine Vermutung liegt darin das ich einen Fehler mache mit uiwait und uiresume und die Bezeichnung von
Code:

uiresume(Gebrauchstauglichkeit);
 

falsch ist. Ich habe es schon mit uiresume(gcbf) und dergleichen versucht aber leider immer irgendeinen Fehler bekommen. Auch das versetzten von uiwait in den Code der ersten GUI hat nichts gebracht. Leider kann ich darauf nicht verzichten und derzeit sehe ich keinen Weg es zu umgehen. Sad

Nerv mich gerade unglaublich daran das ich nicht checke wo der Fehler liegt.... Mad

Ich hoffe ich habe mein Problem verständlich dargestellt.

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