Verfasst am: 20.09.2014, 12:06
Titel: callback/ Variablen an Funktion übergeben und durchlaufen
Hallo zusammen,
ich mache grade meine ersten GUI-Schritte und trotz der Suchfunktion hier im Forum komme ich leider nicht weiter
Ich möchte gerne ein gui erstellen in dem der Nutzer insgesamt sieben Daten eingeben muss. Vier davon per Hand und weitere drei aus Excel einlesen.
Duch den Pushbuttom sollen alle diese Daten eingelesen und an eine .m-Funktion zum auswerten übergeben werden. Bis jetzt konnte ich nur ein gui mit guide erstellen mit den edit/ text Fenstern.
Ich denke ich muss callback benutzen, aber ich weiß nicht genau wie.
Ich danke allen schon mal im Voraus!
das Einlesen der Eingabedaten, habe ich hingekriegt
Nun bleibt nur noch die Frage, wie ich das Einlesen der Excel Datei machen. kann. Das habe ich im Forum gefunden. Aber wofür steht die Eins?
und wie kann ich ein Fenster öffnen, so dass der User sich die Datei selber aussucht?
Bei Fragen bitte zunächst mal in die Doku schauen. Dort steht dazu:
Zitat:
___ = xlsread(filename,-1) opens an Excel window to interactively select data. Select the worksheet, drag and drop the mouse over the range you want, and click OK. This syntax is supported only on Windows systems with Excel software.
Zitat:
und wie kann ich ein Fenster öffnen, so dass der User sich die Datei selber aussucht?
Du hast doch schon alles! uigetfile öffnet dir das Auswahlfenster für deinen xls file und gibt den Pfad und Name zurück, welche du dann an die xlsread function übergibst.
vielen Dank für eure Antworten!
es funktioniert als ich uigetfile bei einer Listbox benutz habe. Bei einem text-Feld nicht.
Jedoch ist es so, dass vier Möglichkeiten in der Listbox anzuklicken sind. Und sobald ich eins anklicke, werden vier Festern zum aussuchen der xls. Datei geöffnet. Was muss ich tun, damit zu jeder Möglichkeit nur ein Fenster sich öffnet.
ich denke, mir fehlt ein Befehl der das angeklickte mit dem jeweiligen uigetfile verbindet. Macht man das mit set?
Meine anderen Daten kriege ich auch nicht verbunden...
Code:
function mutat_Callback(hObject, eventdata, handles) % hObject handle to mutat (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 mutat as text % str2double(get(hObject,'String')) returns contents of mutat as a double
mutat=eval(get(handles.mutation, 'String'));
guidata(hObject, handles);
% --- Executes during object creation, after setting all properties. function mutat_CreateFcn(hObject, eventdata, handles) % hObject handle to mutat (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
und die Exceldaten die geladen werden sollen, habe ich jetzt auch ohne die Listbox gemacht.
Code:
function auftraegeLaden_Callback(hObject, eventdata, handles) % hObject handle to auftraege (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 auftraege as text % str2double(get(hObject,'String')) returns contents of auftraege as a double
% --- Executes during object creation, after setting all properties. function auftraege_CreateFcn(hObject, eventdata, handles) % hObject handle to auftraege (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
% --- Executes on button press in berechne. function berechne_Callback(hObject, eventdata, handles) % hObject handle to berechne (see GCBO) % eventdata reserved - to be defined in a future version of MATLAB % handles structure with handles and user data (see GUIDATA)
Hier wäre ein Möglichkeit so fern ich den Aufbau deiner GUI überhaupt richtig verstanden habe, wie du xls in er Callback function einliest, abspeicherst und in einer anderen Function wieder lädst.
Code:
function mutat_Callback(hObject, eventdata, handles) % hObject handle to mutat (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 mutat as text % str2double(get(hObject,'String')) returns contents of mutat as a double
mutat=eval(get(handles.mutation, 'String'));
guidata(hObject, handles);
% ich verstehe hier den Grund für den eval nicht? Vorschlag...
function auftraegeLaden_Callback(hObject, eventdata, handles) % hObject handle to auftraege (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 auftraege as text % str2double(get(hObject,'String')) returns contents of auftraege as a double
% --- Executes on button press in berechne. function berechne_Callback(hObject, eventdata, handles) % hObject handle to berechne (see GCBO) % eventdata reserved - to be defined in a future version of MATLAB % handles structure with handles and user data (see GUIDATA)
% get the structure in the subfunction
handles = guidata(gcbo);
function auftraegeLaden_Callback(hObject, eventdata, handles) % hObject handle to auftraege (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 auftraege as text % str2double(get(hObject,'String')) returns contents of auftraege as a double
% save the changes to the structure to use it in other functions
guidate(gcbo,handles);
% --- Executes during object creation, after setting all properties. function auftraege_CreateFcn(hObject, eventdata, handles) % hObject handle to auftraege (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
Imho ist nur die Callback Funktion entscheidend. Aber bitte die anderen Funktionen, welche von GUIDE automatisch generiert worden sind deshalb nicht gleich löschen. Ich nehme mal sie wird aufgerufen, da in der GUI ein Button Namens "auftraegeLaden" gedrückt wurde.
Ansonsten ist auftraege eine lokale Variable, die nur innerhalb der Funktion bekannt ist. Daher wird sie mit in die handles Struktur integriert, gespeichert und kann dann in anderen Funktionen wieder aufgerufen werden.
ok, aber warum wird das Fenster zur Auswahl der xls-Dateien nicht geöffnet?
Code:
function auftraegeLaden_Callback(hObject, eventdata, handles) % hObject handle to auftraege (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 auftraege as text % str2double(get(hObject,'String')) returns contents of auftraege as a double
% save the changes to the structure to use it in other functions
guidate(gcbo,handles);
% --- Executes during object creation, after setting all properties. function auftraege_CreateFcn(hObject, eventdata, handles) % hObject handle to auftraege (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
Bei einer Listbox funktioniert es mit dem excel-Fenster
aber es gibt trotzdem eine Fehlermeldung. Ich nehme an, weil es Matrizen sind. Welchen Befehl muss ich da benutzen?
Code:
% --- Executes on selection change in listbox. function listbox_Callback(hObject, eventdata, handles) % hObject handle to listbox (see GCBO) % eventdata reserved - to be defined in a future version of MATLAB % handles structure with handles and user data (see GUIDATA)
% --- Executes during object creation, after setting all properties. function listbox_CreateFcn(hObject, eventdata, handles) % hObject handle to listbox (see GCBO) % eventdata reserved - to be defined in a future version of MATLAB % handles empty - handles not created until after all CreateFcns called
% Hint: listbox 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
% --- Executes on button press in pushbutton. function pushbutton_Callback(hObject, eventdata, handles) % hObject handle to pushbutton (see GCBO) % eventdata reserved - to be defined in a future version of MATLAB % handles structure with handles and user data (see GUIDATA)
handles=guidata(gcbo, handles);
GUI_02
Warning: Interactive selection cannot be used in 'basic' mode. First sheet will be
loaded.
> In xlsread at 205
In GUI_02>listbox_Callback at 85
In gui_mainfcn at 96
In GUI_02 at 42
In @(hObject,eventdata)GUI_02('listbox_Callback',hObject,eventdata,guidata(hObject))
Undefined function 'guidate' forinput arguments of type 'struct'.
Error in GUI_02>listbox_Callback (line87)
guidate(gcbo,handles);
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.