Und min ist eine Standard Matlab Funktion weshalb der Name als Variable keine gute Idee ist. Auch das Speichern von min macht so wieder keinen Sinn. Beim Verlassen der Funktion ist es unbekannt und kann daher in anderen Funktionen nicht genutzt werden. Lass es doch einfach mal handles.XXX. Teste erstmal den Code so wie ich es vorgeschlagen habe, bevor du daran weitere Änderungen vornimmst.
oh, das mit guidate war keine Absicht. Danke, für den Hinweis.
Jetzt habe ich probiert, dass die ausgewählte Datei einfach nur angezeigt wird. Aber leider klappt es nicht.
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)) Error using handle.handle/get
Invalid or deleted object.
Error in GUI_02>listbox_Callback (line87)
handles.minimal=get(handles.minimal,'String');
Was soll handles.minimal sein? xlsread speichert dir die eingelesenen Daten aus deinem ausgewählten file in minimal. Die willst du doch weiter verwenden? Warum also nicht...
Wozu die get Funktion von einem handle das nicht vorhanden ist? Was soll denn überhaupt in der Callback listbox Funktion passieren und durch welche Aktion des Nutzers der GUI wird sie aufgerufen?
Code:
% --- 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)
% vollkommen ausreichend, damit kennt die Funtion pushbutton die struct handle und kann drauf zugreifen guidata(gcbo, handles);
% Ausgabe...aber wo? % sicherlich nicht in einem Pushbutton...dazu brauchst es doch ein Textfeld in deiner GUI. Diesem Textfeld musst du das Ergebnis übergeben und nicht dem Button. set(handles.textfeld,'String',num2str(handles.minimal));
Wenn ich ein Element aus der listbox anklicke, öffnet sich das excel-Fenster, was auch gewünscht ist.
Die Exceldateien (insgesamt 3) sind Matrizen. Die sollen mit anderen Eingabedaten, vier Zahlen, in meineFunktion eingefügt werden. Beim klicken des pushbuttoms "lade" sollen die Daten in meineFunktion geladen und ausgewertet werden.
Als Ergebnis (ein Vektor) soll das Ergebnis aus meinerFunktion rauskommen, samt Plot.
Ehrlich gesagt ist mir damit immer noch nicht klar was die Listbox machen soll.
Zitat:
Wenn ich ein Element aus der listbox anklicke, öffnet sich das excel-Fenster, was auch gewünscht ist.
Wie denn das? Es wird ein excel sheet geöffnet oder meinst du die uigetfile box, wo man den excel file auswählen sollen?
Soll man eine "Funktion" aus der Listbox auswählen? Also musst du doch erfassen und abspeichern welches Element in der ListBox gewählt wurde.
Danach gibt man etwas in ein Textfeld ein und drückt dann auf Laden? Es muss also eine Funktion geben, welche die Eingabe aus dem Textfenster erfasst. Mit dem pushbutton "Laden" soll dann eine Funktion zum Verarbeiten der Daten aufgerufen werden. Was aber ist listDaten, min und max?
Sorry, für die ungenaue Beschreibung ja, ich meinte, dass beim anklicken von min oder max sich die uigetfile box öffnet und dann sollen die excel Dateien ausgesucht werden. Falls keins ausgesucht wird, soll eine initialisierung =0 erfolgen.
min und max das sind Anweisungen die einzuhalten sind.
Wie kann ich diese erfassen und speichern?
In den Textfeldern sollen Zahlen eingegeben werden und dann auch abgespeichert werden.
Und dann mit dem pushbutton sollen die ganzen Daten an eine Funktion überführt werden.
Damit ist mir immer noch nicht klar, was bei Max, Min und ListDaten passieren soll.
Schau dir mal folgendes Bsp ein, welches ich aus den schon vorhandenen Bsp. von GUIDE genommen, etwas abgeändert und ergänzt habe. Vielleicht hilft dir das ja weiter.
die Daten geladen und unter handels.user_auswahl gespeichert werden, oder?
Beim drücken des pushbuttons soll meine Funktion mit den gespeichert Daten ausgeführt werden. Wie gebe ich es ein? und wo genau?
Insgesamt möchte ich einen genetischen Algorithmus benutzen. min und max sind dabei Vorschriften, eine Art Regeln die von Objekten einzuhalten sind. Und diese Vorschriften können sich ändert, deshalb soll der Nutzer in Abhängigkeit von den Wahl des Users die passenden Vorschriften auswählen können. Es kann sein das min, max und/oder eine Kombi davon zu beachten ist. Oder aber auch nur eins oder zwei der Vorschriften einzuhalten sind.
gespeichert werden, hab ich das richtig verstanden?
Was ist denn nun schon wieder handles.user_eingabe? Ist das mein handles.user_input? Es ist schwer dir zu helfen wenn du ständig die Namen der Variablen änderst und ich dann raten muss was das nun wieder ist.
Nein, eben nicht. handles.user_input wird doch nur als Variable in dem struct handles abgelegt. Wenn du die Eingabe im Textfenster holen willst, musst du auch den Namen des Objekts benutzen. Get und set brauchst du nur um die aktuellen Werte von Objekten (Buttons/Textfeld etc.) aus deiner GUI abzufragen bzw. zu setzen. In meinen code heißt das Textfeld edit1...daher auch:
Code:
% Eingabe in Textfeld holen und speichern
handles.user_input = get(handles.edit1,'string');
handles.user_input kannst du hingegen einfach so ohne get oder set verwenden. Der Wert ist doch dort schon gespeichert und muss deshalb nicht abgefragt werden.
die Daten geladen und unter handels.user_auswahl gespeichert werden, oder?
Ja, handles.user_auswahl kann somit global verwendet werden. Andere Funktionen können es somit nutzen.
Zitat:
Beim drücken des pushbuttons soll meine Funktion mit den gespeichert Daten ausgeführt werden. Wie gebe ich es ein? und wo genau?
Schau dir bitte diese Funktion genauer an. Sie wird aufgrufen sobald der Button "Laden" gedrückt wird. Hier sollte also der Hauptteil deines Programms liegen. Die Switch Anweisung steuert nun die jeweilige Funktion, welche bei Max, Min oder ListLaden erfolgen soll.
Code:
function pushbutton1_Callback(hObject, eventdata, handles) % hObject handle to pushbutton1 (see GCBO) % eventdata reserved - to be defined in a future version of MATLAB % handles structure with handles and user data (see GUIDATA) axes(handles.axes1);
cla;
% Button Laden wurde gedrückt...was nun? % Hole Auswahl in Listbox
popup_sel_index = get(handles.popupmenu1, 'Value');
switch popup_sel_index
case1% Auswahl ListDaten % Anweisung folgt hier... case2% Auswahl Min % Anweisung folgt hier... % Auswahl und Lesen eines excel sheets [Dateiname, Dateipfad] = uigetfile('*.xls','Waehle Aufträge.xls file:');
ifisempty(Dateiname) || isempty(Dateipfad)% kein File gewählt % Anweisung folgt hier... else
handles.minimal = xlsread(fullfile(Dateipfad, Dateiname));
% save the changes to the structure guidata(gcbo,handles);
end % Ausgabe in figure...so fern gewünscht plot(handles.minimal);
case3% Auswahl Max % Anweisung folgt hier... end
Die Kommentare sollten doch eigentlich eindeutig sein, zu welchem case, Max, Min und ListDaten gehört. Ob bei case 2 wirklich das Excel sheet eingelesen werden soll, weiß ich nicht. Das war zur Verdeutlichung. Du siehst im Code wie du die Auswahl aus deiner Listbox holst und dann je nach Auswahl entsprechend weiter machst. Was dann dort passiert musst du schon selbst schreiben
vielen danke!!! die Variablen werden jetzt alle erkannt!
Das einzige Problem was ich noch habe ist, dass mein GA für jede Generation ein Fitnesswert ausgibt. All diese sollen dann in einem text Feld erscheinen.
Im Moment wird mir noch der Fehler angezeigt
Code:
>> GUI_02
Error using genetic
Too many output arguments.
Error in GUI_02>lade_Callback (line88)
result=genetic( handles.pop, handles.sel, ...
bei meiner Funktion genetic habe ich aber kein Output an sich definiert. Die Fitnesswerte werden im Laufe des Programms nach jeder Generation angezeigt. Kommt deshalb der Fehler?
das einlesen aus Excel klappt jetzt. Ganze zahlen werden auch normal eingelesen. Nur bei Kommazahlen haperts.
Und wenn ich dann in die GUI neue Werte eingebe, dann werden diese nicht aktualisiert.
Da dies nur der m-file ist, kann ich nur raten Geht es um diese Funktion...ist das ein Textfeld?
Code:
function selektion_Callback(hObject, eventdata, handles) % hObject handle to selektion (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 selektion as text % str2double(get(hObject,'String')) returns contents of selektion as a double
handles.textfeld = str2num(get(handles.selektion, 'String'));
guidata(gcbo,handles);
Du liest einen String ein...welcher je nach Eingabe zwar eine Zahl sein kann, aber der eben auch erst entsprechend umgewandelt werden muss. Falls ein spezielle Formatierung notwendig ist, sonst z.B.
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.