Verfasst am: 02.04.2008, 14:09
Titel: Variablen in Workspace aus GUI
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*
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
weili*
Gast
Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
Verfasst am: 02.04.2008, 14:27
Titel:
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?
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:
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, 16:13, insgesamt einmal bearbeitet
weili*
Gast
Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
Verfasst am: 02.04.2008, 15:43
Titel:
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: ---
Verfasst am: 25.03.2011, 15:01
Titel: Scalar in Matrix aus GUI
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.
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;');
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 ^^
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
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
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.