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

Parameter von einer GUI zur anderen

 

balli1187
Forum-Anfänger

Forum-Anfänger


Beiträge: 26
Anmeldedatum: 15.06.12
Wohnort: Magdeburg
Version: 2007b
     Beitrag Verfasst am: 25.04.2014, 13:48     Titel: Parameter von einer GUI zur anderen
  Antworten mit Zitat      
Hallo,

ich habe eine GUI mittels GUIDE erstellt. Darin befindet sich ein Button, dessen Callback ein neues Fenster aufrufen soll. soweit bin ich gekommen... Das zweite Fenster öffnet sich und dortige (GUI-)Funktionen werden ausgeführt.

nun möchte ich, dass beide fenster mit einander interagieren. Konkret möchte ich bei Aufruf der Sub-Gui drei Parameter von der Main-Gui übernehmen und die Werte in einem Edit-Feld anzeigen. Wenn die SUb-Gui geschlossen wird, sollen ebenfalls drei Werte wieder zurück übergeben werden.
Den Aufruf aus der Main-Gui würde ich folgendermaßen gestallten
Code:
[para_1, para_2, para_3]=sub_gui(para_4, para_5, para_6);

Stimmt das soweit?
An welcher stelle in der Sub-Gui muss ich meine Parameter "abholen"? Ich habe in dem sub_gui.m-File ja auch handles und hObject aber das sind doch sicher nicht die selben, wie in meiner Main-Gui oder?

MfG, Stephan
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: 25.04.2014, 14:27     Titel:
  Antworten mit Zitat      
Hallo,

para_4 bis para_6 können so übergeben werden und werden dann in der OpeningFcn in "varargin" zur Verfügung stehen.

para_1 bis para_3 müssen in der Output Function zurückgegeben werden.

Allerdings muss sichergestellt werden, dass die Output Function nicht zu früh ausgeführt wird (uiwait in der OpeningFcn).

Sobald die Parameter zurückzugeben werden sollen, muss ein entsprechendes uiresume ausgeführt werden. Das kann z.B. im Callback eines Pushbuttons sein.

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

Forum-Anfänger

Forum-Anfänger


Beiträge: 26
Anmeldedatum: 15.06.12
Wohnort: Magdeburg
Version: 2007b
     Beitrag Verfasst am: 25.04.2014, 17:26     Titel:
  Antworten mit Zitat      
Hallo Harald und danke für deine Antwort!
Ich brauch aber noch ein paar Zusatzinfos für Newbees Wink
Harald hat Folgendes geschrieben:
para_4 bis para_6 können so übergeben werden und werden dann in der OpeningFcn in "varargin" zur Verfügung stehen

muss ich in der Opening function was verändern, in der definition oder dergleichen, oder werden para_4...6 in die handles-Struktur eingepflegt?

Harald hat Folgendes geschrieben:
para_1 bis para_3 müssen in der Output Function zurückgegeben werden.

Allerdings muss sichergestellt werden, dass die Output Function nicht zu früh ausgeführt wird (uiwait in der OpeningFcn).

Sobald die Parameter zurückzugeben werden sollen, muss ein entsprechendes uiresume ausgeführt werden. Das kann z.B. im Callback eines Pushbuttons sein.

Oha... Da ist ja noch mehr Neuland.... Werd ich wohl noch etwas recherchieren müssen. Am liebsten wäre es mir, wenn die Parameter erst zurückgegeben werden, wenn die Sub-Gui geschlossen wird. Ich hatte gehofft einfach einen Befehl in der DeleteFcn unterbringen zu können aber so einfach scheint es wohl nicht zu gehen oder?!?

Grüße, Stephan
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: 25.04.2014, 18:59     Titel:
  Antworten mit Zitat      
Hallo,

Zitat:
muss ich in der Opening function was verändern, in der definition oder dergleichen, oder werden para_4...6 in die handles-Struktur eingepflegt?

Nein, in der Definition solltest du nichts verändern. varargin wird ein Cell Array mit 3 Elementen sein. Der Inhalt der ersten Cell ist para_4 etc.

Zitat:
Ich hatte gehofft einfach einen Befehl in der DeleteFcn unterbringen zu können aber so einfach scheint es wohl nicht zu gehen oder?!?

Ich würde da die CloseRequestFcn verwenden - und in die muss dann das uiresume rein.

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

Forum-Anfänger

Forum-Anfänger


Beiträge: 26
Anmeldedatum: 15.06.12
Wohnort: Magdeburg
Version: 2007b
     Beitrag Verfasst am: 26.04.2014, 11:05     Titel:
  Antworten mit Zitat      
Mahlzeit Smile

Nochmals großen Dank an Harald für die Hilfe! Ich habs jetzt hinbekommen und funktioniert sehr gut. Ich möchte den Code hier auszugsweise posten (die Stellen die angepasst werden mussten), falls nochmal jemand ein Beispiel sucht
Code:
function sub_gui_OpeningFcn(hObject, eventdata, handles, varargin)
% This function has no output args, see OutputFcn.
% hObject    handle to figure
% eventdata  reserved - to be defined in a future version of MATLAB
% handles    structure with handles and user data (see GUIDATA)
% varargin   command line arguments to cell_value_fig (see VARARGIN)

% Choose default command line output for sub_gui
handles.output = hObject;
    handles.para_4=varargin{1};
    handles.para_5=varargin{1};
    handles.para_6=varargin{3};
% Update handles structure
guidata(hObject, handles);
uiwait(hObject);

% --- Outputs from this function are returned to the command line.
function varargout = sub_gui_OutputFcn(hObject, eventdata, handles)
% varargout  cell array for returning output args (see VARARGOUT);
% hObject    handle to figure
% eventdata  reserved - to be defined in a future version of MATLAB
% handles    structure with handles and user data (see GUIDATA)

% Get default command line output from handles structure
varargout{1}=handles.para_1;
varargout{2}=handles.para_2;
varargout{3}=handles.para_3;
delete(hObject);

% --- Executes when user attempts to close figure1.
function figure1_CloseRequestFcn(hObject, eventdata, handles)
% hObject    handle to figure1 (see GCBO)
% eventdata  reserved - to be defined in a future version of MATLAB
% handles    structure with handles and user data (see GUIDATA)

uiresume(hObject);

Der Aufruf sieht dann folgendermaßen aus
Code:
[para_1, para_2, para_3]=sub_gui(para_4, para_5, para_6);

Die Subgui wird dann ausgeführt und beim schließen, wernden die entsprechenden Werte zurückgegeben.
Im Moment bekomme ich noch eine Fehlermeldung, wenn ich die Sub-Gui teste und vergesse Parameter zu übergeben. Aber gut, ich will ja Parameter übergeben und zurückbekommen, also muss ich es auch richtig aufrufen Surprised

Schönes Wochenende, Stephan
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: 26.04.2014, 11:15     Titel:
  Antworten mit Zitat      
Hallo,

du könntest den Fehler z.B. so umgehen:

Code:
if nargin < 4
handles.para_4= % Defaultwert
else
handles.para_4= varargin{1};
end


Im Code hat sich auch ein Fehler eingeschlichen:
Code:
handles.para_5=varargin{2}; % 2 statt 1


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

Forum-Anfänger

Forum-Anfänger


Beiträge: 26
Anmeldedatum: 15.06.12
Wohnort: Magdeburg
Version: 2007b
     Beitrag Verfasst am: 26.04.2014, 12:15     Titel:
  Antworten mit Zitat      
Code:
handles.para_5=varargin{2}; % 2 statt 1

Smile Kleiner Copy-Paste-Fehler... Danke.
Code:
if nargin < 4
handles.para_4= % Defaultwert
else
handles.para_4= varargin{1};
end

Das verstehe ich nicht ganz! nargin gibt mir doch die Zahl die übergebenen Parameter zurück - also in mienem Fall 3, wenn ich die Funktion aufrufe wie beschrieben, oder nicht?
Wenn ich am Ende der OpeningFcn einen Haltepunkt setze, erscheint varargin als 1x3 Cell-Array im Workspace.

Gruß, Stephan
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: 26.04.2014, 13:00     Titel:
  Antworten mit Zitat      
Hallo,

nargin ist die Anzahl der insgesamt übergebenen Argumente. Du rufst zwar mit drei Argumenten auf, aber du rufst die OpeningFcn ja nicht direkt auf.

Die OpeningFcn nimmt hObject, eventdata, handles und dann varargin entgegen. Deine drei Argumente wären also das 4. - 6.

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

Forum-Anfänger

Forum-Anfänger


Beiträge: 26
Anmeldedatum: 15.06.12
Wohnort: Magdeburg
Version: 2007b
     Beitrag Verfasst am: 27.04.2014, 09:23     Titel:
  Antworten mit Zitat      
Zitat:
nargin ist die Anzahl der insgesamt übergebenen Argumente.

Ahhhh... Alles klar! Ich dachte es handelte sich nur um die Anzahl der Argumente von varargin... So ist es natürlich klar, dass die drei "Standard"-Argumente noch hinzukommen.

Danke und weiterhin fröhliches Programmieren,
Stephan
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.