Verfasst am: 24.02.2014, 22:29
Titel: Guidata - Variablaustausch GUI und m
Hallo Leute,
ich habe m.M.n. ein recht einfaches Problem, dass mir schon eine Weile Kopfzerbrechen bereitet. Ich würde gerne Variablen und structs mittels Guidata beliebig zwischen einer/mehreren GUIS und Files austauschen. Ersteinmal meine GUI (Test_GUI):
Code:
functionvarargout = Test_Gui(varargin) % TEST_GUI MATLAB code for Test_Gui.fig % TEST_GUI, by itself, creates a new TEST_GUI or raises the existing % singleton*.
%
% H = TEST_GUI returns the handle to a new TEST_GUI or the handle to % the existing singleton*.
%
% TEST_GUI('CALLBACK',hObject,eventData,handles,...) calls the local % function named CALLBACK in TEST_GUI.M with the given input arguments.
%
% TEST_GUI('Property','Value',...) creates a new TEST_GUI or raises the % existing singleton*. Starting from the left, property value pairs are % applied to the GUI before Test_Gui_OpeningFcn gets called. An % unrecognized property name or invalid value makes property application % stop. All inputs are passed to Test_Gui_OpeningFcn via varargin.
%
% *See GUI Options on GUIDE's Tools menu. Choose "GUI allows only one % instance to run (singleton)".
%
% See also: GUIDE, GUIDATA, GUIHANDLES
% Edit the above text to modify the response to help Test_Gui
% Last Modified by GUIDE v2.5 24-Feb-2014 21:36:19
% Begin initialization code - DO NOT EDIT
gui_Singleton = 1;
gui_State = struct('gui_Name', mfilename, ...
'gui_Singleton', gui_Singleton, ...
'gui_OpeningFcn', @Test_Gui_OpeningFcn, ...
'gui_OutputFcn', @Test_Gui_OutputFcn, ...
'gui_LayoutFcn', [] , ...
'gui_Callback', []);
ifnargin && ischar(varargin{1})
gui_State.gui_Callback = str2func(varargin{1});
end
% --- Executes just before Test_Gui is made visible. function Test_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 Test_Gui (see VARARGIN)
% Choose default command line output for Test_Gui
handles.output = hObject;
% UIWAIT makes Test_Gui wait for user response (see UIRESUME) % uiwait(handles.figure1);
% --- Outputs from this function are returned to the command line. functionvarargout = Test_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.output;
% varargout{2} = handles.Jahre;
% --- Executes on button press in Berechnen. function Berechnen_Callback(hObject, eventdata, handles) % hObject handle to Berechnen (see GCBO) % eventdata reserved - to be defined in a future version of MATLAB % handles structure with handles and user data (see GUIDATA)
Jahre = str2double(get(handles.Eingabe,'String'));
handles.Jahre = Jahre;
guidata(hObject,handles);
function Eingabe_Callback(hObject, eventdata, handles) % hObject handle to Eingabe (see GCBO) % eventdata reserved - to be defined in a future version of MATLAB % handles structure with handles and user data (see GUIDATA)
% Hints: get(hObject,'String') returns contents of Eingabe as text % str2double(get(hObject,'String')) returns contents of Eingabe as a double
% --- Executes during object creation, after setting all properties. function Eingabe_CreateFcn(hObject, eventdata, handles) % hObject handle to Eingabe (see GCBO) % eventdata reserved - to be defined in a future version of MATLAB % handles empty - handles not created until after all CreateFcns called
% Hint: edit controls usually have a white background on Windows. % See ISPC and COMPUTER. ifispc && isequal(get(hObject,'BackgroundColor'), get(0,'defaultUicontrolBackgroundColor')) set(hObject,'BackgroundColor','white');
end
Wie schnell zu erkennen ist möchte ich sowohl die Variable (Jahre - welche aus der GUI zur File geht) in die File bekommen, als auch die Variable Loesung (Aus File zur GUI) und einen Plot (Grafik) wieder zurückgeben. Wahrscheinlich habe ich einen Fehler in der Nutzung des GUIDATA. Denn der Fehler ist folgender:
[...] % --- Executes on button press in Berechnen. function Berechnen_Callback(hObject, eventdata, handles) % hObject handle to Berechnen (see GCBO) % eventdata reserved - to be defined in a future version of MATLAB % handles structure with handles and user data (see GUIDATA)
Jahre = str2double(get(handles.Eingabe,'String'));
handles.Jahre = Jahre;
guidata(hObject,handles.Jahre);
danke erstmal für deine Antwort, trotz der späten Stunde.
Ich verstehe halt einfach noch nicht, was das Programm macht. Du sagst Jahre muss ich aus handles holen. Gut nun nochmal das aktuelle file:
% --- Executes on button press in Berechnen. function Berechnen_Callback(hObject, eventdata, handles) % hObject handle to Berechnen (see GCBO) % eventdata reserved - to be defined in a future version of MATLAB % handles structure with handles and user data (see GUIDATA)
Jahre = str2double(get(handles.Eingabe,'String'));
handles.Jahre = Jahre;
guidata(hObject,handles.Jahre);
Ich verstehe das Vorgehen im Programm gerade absolut nicht
Palina
Gast
Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
Verfasst am: 25.02.2014, 01:20
Titel:
Okay, ich habs hinbekommen - Danke Harald, der Einsatz von GUIDATA und die Verwendung der handles ist bei mir jedoch immer noch ein GLücksspiel. Weiteres Problem ist, nur die Grafik übernimmt er nicht mit. Bzw. sie wird nicht in der GUI dargestellt. Ein Fehler tritt nicht auf, wenn der Code wie folgt aussieht:
GUI
1.
Code:
function Berechnen_Callback(hObject, eventdata, handles) % hObject handle to Berechnen (see GCBO) % eventdata reserved - to be defined in a future version of MATLAB % handles structure with handles and user data (see GUIDATA)
Jahre = str2double(get(handles.Eingabe,'String'));
handles.Jahre = Jahre;
guidata(hObject,handles.Jahre);
du erweiterst handles in Testdifferenz, das ist aber nur eine lokale Variable. Dann aktualisierst du die GUI-Daten. In der Hauptfunktion wird aber noch immer handles verwendet, also inzwischen veraltete GUI-Daten.
Eine Möglichkeit: Füge nach Zeile 88 folgendes ein:
Ich persönlich bevorzuge getappdata/setappdata zu guidata, da es meines Erachtens klarer und sicherer ist.
Grüße,
Harald
Einstellungen und Berechtigungen
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.