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

Deklaration von Variablen in der Openingfunktion

 

stealth_mx
Forum-Fortgeschrittener

Forum-Fortgeschrittener


Beiträge: 94
Anmeldedatum: 15.06.13
Wohnort: ---
Version: 2013b
     Beitrag Verfasst am: 11.11.2014, 11:41     Titel: Deklaration von Variablen in der Openingfunktion
  Antworten mit Zitat      
Hallo, ich habe ein größeres Programm

in der Main GUI lade ich in der Openingfunktion z.B. die Pfade, viele Variablen, setze die Standardparameter, setze gewisse Objekte auf Enable OFF, etc.

Dafür rufe ich verschiedene Methoden auf, um die Übersichtlichkeit in der Haupt-GUI zu gewährleisten. Das Manipulieren von Objektparametern klappt gut in den externen Methoden. Dafür übergebe ich 'handles'.

Beim Deklarieren von Variablen, bekomme ich jedoch Probleme. Es klappt nicht, bzw. es deklariert diese Variablen in einem anderen Bereich der von der Haupt-GUI nicht zugänglich ist.

Code:

%Minimalbeispiel
function main_figure_OpeningFcn(hObject, eventdata, handles, varargin)
handles.output = hObject;

%Füge Pfade hinzu
pfade();

%Diese Methode funktioniert nicht, hier wollte ich die Deklaration und die Initialisierung durchführen
systemStartParameter(handles);

guidata(hObject, handles);
 


In der externen Methode steht dann
Code:


function systemStartParameter(handles)
handles.simulationTime = 0.25;
....
 


Etwas habe ich nicht richtig verstanden, ich weiß bloß nicht was. Ich kann mich vorstellen, dass ich diese Variablen zurückgeben muss, aber dann habe ich ja nichts gewonnen


Danke im Voraus!
Private Nachricht senden Benutzer-Profile anzeigen


denny
Supporter

Supporter



Beiträge: 3.853
Anmeldedatum: 14.02.08
Wohnort: Ulm
Version: R2012b
     Beitrag Verfasst am: 11.11.2014, 15:17     Titel:
  Antworten mit Zitat      
Hallo

diese Funktion soll auch die veränderten handles zurückgeben, sonst bekommt OpeningFcn nichts von der Änderung.
so:
Code:

%Minimalbeispiel
function main_figure_OpeningFcn(hObject, eventdata, handles, varargin)
handles.output = hObject;

%Füge Pfade hinzu
pfade();

%Diese Methode funktioniert nicht, hier wollte ich die Deklaration und die Initialisierung durchführen
handles = systemStartParameter(handles);

guidata(hObject, handles);

 



Code:


function handles = systemStartParameter(handles)
handles.simulationTime = 0.25;
...
 



Oder nutzt in der externen Funktion GUIDATA?

Dann muss man nach der Aufruf dieser Funktion ein handles-Update in der Opening-Fcn machen, damit die Funktion Änderungen mitbekommt sonst überschreibt diese durch GUIDATA.



Code:

%Minimalbeispiel
function main_figure_OpeningFcn(hObject, eventdata, handles, varargin)
handles.output = hObject;

%Füge Pfade hinzu
pfade();

%Diese Methode funktioniert nicht, hier wollte ich die Deklaration und die Initialisierung durchführen
systemStartParameter(handles);
handles = guidata(handles.main_figure)

guidata(hObject, handles);

 



Code:


function handles = systemStartParameter(handles)
handles.simulationTime = 0.25;
...
guidata(handles.main_figure, handles);

 






Jede Funktion hat für ihre Variable nur speziellen Workspace, wird die Funktion beendet, werden auch alle Variablen gelöscht. Stichwort Lokale Variable.
Außer man gibt diese Variable wieder zurück.
GUIDATA oder SETAPPDATA/GETAPPDATA, diese Funktionen sind wichtig um z.B. zwischen Callbacks oder zwischen mehreren Fenstern zu kommunizieren.

In deinem Fall wird ausreichen wenn die Varaible handles wieder zurückgibst.
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: 11.11.2014, 16:49     Titel:
  Antworten mit Zitat      
Hallo, danke für die Antwort, ja nun klappt es wie es soll.

Ich habe da noch eine Frage, die der ersten sehr ähnlich ist.

Ich rufe in meiner Haupt GUI im Menu ein neues GUI Fenster auf. Dort sollen genau die Deklarationen belegt werden die ich in der externen angelegt habe.

Dafür habe ich im neuen GUI Fenster edit Boxen.

Es soll jedoch beim erneuten Öffen des Fensters die alten Werte in die Editboxen laden. Damit ich quasi nicht immer alles neu ausfüllen muss. sondern nur das wechsel was mir bis jetzt nicht passt.

Ich übergebe momentan die Variablen an das neue Fenster, manipuliere sie und gebe sie wieder zurück. dann speichere ich sie in den alten handles. Das ist aber sicher nicht schön und bei größeren Datenmengen auch nicht effizient:
Code:

function button_Callback(hObject, eventdata, handles)
[x y] = neues_gui(handles.name_x,handles.name_y)
handles.name_x = x;
handles.name_y = y;

guidata(handles)

end

 


Es soll quasi wie eine Option sein, die man von anderen Programmen kennt. Man stellt was um, guckt sich das Ergebnis an und wenn man damit nicht zufrieden ist, verstellt man solange Variablen in der Option bis die Ausgabe passt. Also ganz klassisches Menuoptionsfenster.

Gibt es auch dafür eine Möglichkeit?

Globale Variablen möchte ich nicht nutzen, weil ich der Meinung bin,dass sie nicht dafür konzeptiert wurden.


Oh, du hast mir ja die Schlüsselwörter ja schon gegeben, Setappdata. Werde mir das die Sachen durchlesen, vielleicht klappt dann auch so. Laughing
Private Nachricht senden Benutzer-Profile anzeigen
 
denny
Supporter

Supporter



Beiträge: 3.853
Anmeldedatum: 14.02.08
Wohnort: Ulm
Version: R2012b
     Beitrag Verfasst am: 11.11.2014, 17:16     Titel:
  Antworten mit Zitat      
Hallo

du kannst dir dazu diese Video-Tutorial von Doug anschauen:
http://www.mathworks.com/matlabcent.....guide-advanced-techniques
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: 12.11.2014, 12:44     Titel:
  Antworten mit Zitat      
OK super, das klappt auch nun so wie es soll.


Besten Dank Smile
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.