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

Variablen in Workspace aus GUI

 

weili*

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 02.04.2008, 15:09     Titel: Variablen in Workspace aus GUI
  Antworten mit Zitat      
Hallo zusammen,

habe ein Problem mit den Variablen die aus einem GUI in den Workspace geschrieben werden und von da dann wieder aus dem GUI verwendet werden sollen.
Genauer sieht das so aus: Mit Button wird Variable in Workspace geschrieben:
function Raederwahl_Callback(hObject, eventdata, handles)
Ergebnis_7 = get (handles.Raeder, 'Value');
assignin('base','Raeder_Wahl',Ergebnis_7);

jetzt liegt im Workspace die Variable Raeder_Wahl.

wenn ich jetzt mit einem anderen Button ein m-file starten will, welches die Variable Raeder_Wahl benötigt kommt ein Fehler.
Aufruf:
function Model_start_Callback(hObject, eventdata, handles)
INIT_Daten

Fehler:
??? Undefined function or variable 'Raeder_Wahl'.

Error in ==> INIT_Daten at 28
Rad.Variante = Raeder_Wahl;

Error in ==> GUI_testmodell>Raederwahl_Callback at 461
INIT_Daten

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

Error in ==> GUI_testmodell at 43
gui_mainfcn(gui_State, varargin{:});

??? Error using ==> GUI_testmodell('Raederwahl_Callback',gcbo,[],guidata(gcbo))
Undefined function or variable 'Raeder_Wahl'.

??? Error while evaluating uicontrol Callback


Wenn ich die m-file manuel starte funktioniert alles wunderbar...

Wo liegt der Fehler? Könnt ihr mir helfen?
Gruß
*weili*


tompie
Forum-Guru

Forum-Guru


Beiträge: 260
Anmeldedatum: 19.09.07
Wohnort: München
Version: immer alles
     Beitrag Verfasst am: 02.04.2008, 15:18     Titel:
  Antworten mit Zitat      
Hallo,

liest Du in der Funktion Model_start_Callback bzw. INIT_Daten auch den base_workspace wieder ein? Die Fehlermeldung deutet darauf hin, daß Du dies nicht tust.

Generell sollte man diese Art der Variablenübergabe unterlassen. Das ist ja ganz ähnlich zu globalen Variablen. Da kann man in ganz üble Fallen treten.

MfG
Private Nachricht senden Benutzer-Profile anzeigen
 
weili*

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 02.04.2008, 15:27     Titel:
  Antworten mit Zitat      
Erstmal vielen Dank für die schnelle Antwort.

Nein, lese den base_workspace nicht ein. Mit welchem Befehl könnte ich das machen?

Wie kann ich den prinzipiell die Variablenübergabe aus einem GUI geschickter lösen?

Gruß
 
outsider
Forum-Meister

Forum-Meister


Beiträge: 806
Anmeldedatum: 03.09.07
Wohnort: München
Version: R2012b
     Beitrag Verfasst am: 02.04.2008, 15:33     Titel:
  Antworten mit Zitat      
füge folgenden Code in die Funktion hinein, die Variable aus dem Base Workspace verwenden soll:
Code:
Raeder_Wahl=evalin('base','Raeder_Wahl')



MfG
Private Nachricht senden Benutzer-Profile anzeigen
 
tompie
Forum-Guru

Forum-Guru


Beiträge: 260
Anmeldedatum: 19.09.07
Wohnort: München
Version: immer alles
     Beitrag Verfasst am: 02.04.2008, 15:39     Titel:
  Antworten mit Zitat      
Hallo,

Du könntest z.B. die Variable an die Input-Liste der Funktion dranhängen:

Code:
function Model_start_Callback(hObject, eventdata, handles,Raeder_Wahl)



Alternativ kannst Du die Ergebnisse der GUI mit setappdata einen Namen vergeben und entweder (1) an die GUI selbst 'heften' oder (2) an den Root-Level. Im Fall (1) gehen die Daten in dem Moment verloren, in dem auch das GUI geschlossen wird (!), im Fall (2) bleiben sie bestehen, solange die Matlab-Session aktiv ist oder die Daten überschrieben werden. Die Syntax:

(1)
Code:
Alle Ergebnisse in 'struct' werden unter dem Namen 'ErgebnisseGUI' an den handle h (d.i. der handle der GUI, normalerweise identisch mit gcf) geheftet

(2)
Code:
Alle Ergebnisse in 'struct' werden unter dem Namen 'ErgebnisseGUI' an den Root-Level geheftet (s.o.)

MfG

Zuletzt bearbeitet von tompie am 02.04.2008, 17:13, insgesamt einmal bearbeitet
Private Nachricht senden Benutzer-Profile anzeigen
 
weili*

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 02.04.2008, 16:43     Titel:
  Antworten mit Zitat      
füge folgenden Code in die Funktion hinein, die Variable aus dem Base Workspace verwenden soll:
Code:
Raeder_Wahl=evalin('base','Raeder_Wahl')



MfG


Das funktioniert wunderbar! Nur wenn ich ich jetzt aus der m-file eine neue Variable in den Workspace schreiben will, funktioniert es nicht (ohne Fehlermeldung).
Aber ins Command Window wird es geschrieben....
 
Slade

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 25.03.2011, 16:01     Titel: Scalar in Matrix aus GUI
  Antworten mit Zitat      
Hallo,

die hier genannte Lösung ist sehr hilfreich. Ich stehe nun vor dem Problem ein Position in einem Vektor zu füllen.

Habe eine Listbox (LB_MS1) und 2 Butons (B_add_Time, B_add_Hex)
Beim Klicken von B_add_Time soll der Markierte Eintrag an die Stelle 1 des Vektors "MS" und bei B_add_Hex an die Stelle 2

function B_add_Time_Callback(hObject, eventdata, handles)
MS=get(handles.LB_MS1,'Value')
assignin('base', 'Mass(1)',MS)

function B_add_Hex_Callback(hObject, eventdata, handles)
MS=get(handles.LB_MS1,'Value')
Mass=evalin('base','Mass')
assignin('base', 'Mass(2)',MS)

Die dick gedruckten Stellen liefern dann:
??? Error using ==> assignin
Invalid variable name "Mass(1)" in ASSIGNIN.

Weiß jemand eine Lösung?
Vielen Dank im Voraus!

Slade
 
denny
Supporter

Supporter



Beiträge: 3.853
Anmeldedatum: 14.02.08
Wohnort: Ulm
Version: R2012b
     Beitrag Verfasst am: 25.03.2011, 17:19     Titel:
  Antworten mit Zitat      
Hallo
Warum nutzt nicht SETAPPDATA/GETAPPDATA ist viel einfacher und programmiertechnisch viel sauberer.

Verändern von Variablen in anderem Workspace ist nur über Umwege möglich.
Dazu gibt es 2 Möglichkeiten. Bei beiden Varianten müssen alle Variablen in gleichen Workspace existieren.

Code:


% 1.Moegl: Variable Mass in Callback-Workspace holen
function B_add_Time_Callback(hObject, eventdata, handles)
MS      = get(handles.LB_MS1,'Value');
Mass    = evalin('base','Mass');
Mass(1) = MS;
assignin('base', 'Mass',Mass);

% 2.Moelgl. Variable MS in Base exportieren
function B_add_Hex_Callback(hObject, eventdata, handles)
MS      = get(handles.LB_MS1,'Value');
assignin('base', 'MS',MS);  
evalin('base','Mass(2)=MS;');
 
Private Nachricht senden Benutzer-Profile anzeigen
 
Slade

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 28.03.2011, 09:52     Titel:
  Antworten mit Zitat      
Bin noch nicht so vertraut mit MATLAB.

Welches Objekt sollte ich angeben?
Habe den Dateinamen angegeben...

Wie schreibe ich die data-Variablen an?
Ich bekomme einfach nicht beide Werte in einen Vektor...

Code:
function B_add_Time_Callback(hObject, eventdata, handles)
MS=get(handles.LB_MS1,'Value')
setappdata(form,'Mass',MS)

function B_add_Hex_Callback(hObject, eventdata, handles)
MS=get(handles.LB_MS1,'Value')
getappdata(form)
setappdata(form,'Mass(2)=MS') % so geht es nicht
form.Mass(2)=MS % und so auch nicht ^^



Viele Grüße
Slade
 
denny
Supporter

Supporter



Beiträge: 3.853
Anmeldedatum: 14.02.08
Wohnort: Ulm
Version: R2012b
     Beitrag Verfasst am: 29.03.2011, 10:30     Titel:
  Antworten mit Zitat      
Hallo zum besseren Verständnis, schau dir dieses Videotutorial an:

http://www.mathworks.com/matlabcentral/fileexchange/8616

Was steckt hinter der Variablen form den überhaupt?
Jedenfalls sollte form ein Handle sein, es sollte in diese Richtung laufen:
Code:

function B_add_Time_Callback(hObject, eventdata, handles)
MS=get(handles.LB_MS1,'Value')
Mass= MS
setappdata(handles.figure1,'Mass',Mass)


function B_add_Hex_Callback(hObject, eventdata, handles)
MS      =  get(handles.LB_MS1,'Value')
Mass    = getappdata(handles.figure1,'Mass')
Mass(2)=MS;
setappdata(handles.figure1,'Mass', Mass) % so geht es nicht
 
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.