Ich habe auch schon in den bestehenden Themen gesucht, aber leider nichts ganz passendes gefunden, deshalb hier mein Problem:
Mein GUI beinhaltet (unter anderem) einen Slider, zwei edit-textfelder, diverse Checkboxen und einen Pushbutton.
Die Checkboxen geben an welche Vektoren geplottet werden sollen, über den Slider und die edit-textfelder kann der zu plottende Datenausschnitt begrenzt werden, also praktisch Anfang und Ende der y-Achse. Bei Betätigung des Pushbuttons wird der Plot durchgeführt unter Einbeziehung der "Einstellungen" aus den genannten GUI-Objekten.
Nun würde ich gerne erreichen, dass bei Änderungen an den Checkboxen, dem Slider oder den edit-textfeldern sich der Plot automatisch anpasst, ohne dass der Pushbutton neu gedrückt wird und ohne dass eine neue figure geöffnet wird.
Ist das möglich und wenn dann wie?
Habe mit refreshdata experimentiert, leider ohne Erfolg.
Code:
function pushbutton_getchannels_Callback(hObject, eventdata, handles)
% Status der checkboxes wird ausgelesen
handles.check_O1=get(handles.checkbox_O1, 'Value');
... % ausgewählte Kanäle dazwischen plotten
handles.figure_channels=figure('Name', ['Channels ,',handles.filename(9:13)]);
xlim([start ende]);
box('on');
hold('all');
if handles.check_O1==1 plot(handles.O1,'DisplayName','O1');
end if handles.check_O2==1 plot(handles.O2,'DisplayName','O2');
end ... guidata(hObject, handles);
das ist nur möglich, wenn du bei den angesprochenen Elementen einen ähnlichen oder gleichen Callback hinterlegst.
Am einfachsten ist es, im Callback immer dieselbe (ausgelagerte) Funktion aufzurufen, oder über GUIDE oder in der OpeningFcn des GUI die Callback-Eigenschaften der Elemente anzupassen.
Ok, das war schonmal hilfreich. Habe den Plot jetzt als eigene Funktion plotchannels realisiert, die von verschiedenen Stellen aufgerufen werden kann. Hier wird die figure mittels
Nun brauche ich aber in den callbackfunktionen der verschiedenen Elemente ne Abfrage ob der Plot schon existiert oder nicht. (Falls er existiert soll er gelöscht und neu/ aktualisiert werden, falls er noch nicht existiert soll auch nichts passieren). Wie realisiere ich diese Abfrage?
Habe
Code:
ifishandle(handles.figure_channels)
und
ifexist(handles.figure_channels)~=0
probiert, aber bekomme immer die Fehlermeldung "Reference to non-existent field 'figure_channels'", was ja aber genau das ist was ich eigentlich abfragen will. Wo liegt das Problem?
Hab ich probiert, gleiche Fehlermeldung. Ich versteh bloß nicht wieso das ne Fehlermeldung ist, denn das ist doch genau das was ich will: wenn das Feld NICHT existiert, tue dies und das.
Hier nochmal etwas mehr Code, vielleicht überseh ich ja was triviales:
Code:
function pushbutton_getchannels_Callback(hObject, eventdata, handles) % überprüfen, ob der Plot existiert ifisfield(handles, figure_channels) && ishandle(handles.figure_channels) % alten Plot löschen close(handles.figure_channels) end % (neuer) Funktionsaufruf plotchannels
plotchannels (hObject, eventdata, handles)
function plotchannels (hObject, eventdata, handles)
start=str2double(get(handles.edit_startwert, 'String')); %edit_startwert auslesen
lenght=str2double(get(handles.edit_lenght,'String')); % edit_lenght auslesen
ende=start+lenght;
% Status der checkboxes wird ausgelesen
handles.check_O1=get(handles.checkbox_O1, 'Value');
... guidata(hObject, handles);
% ausgewählte Kanäle dazwischen plotten
handles.figure_channels=figure('Name', ['Channels ,',handles.filename(9:13)]);
xlim([start ende]);
box('on');
hold('all');
if handles.check_O1==1 plot(handles.O1,'DisplayName','O1');
end if handles.check_O2==1 plot(handles.O2,'DisplayName','O2');
end ... legend('show') guidata(hObject, handles)
Ok, Problem selber gefunden, im isfield-Befehl fehlten Hochkommata um figure_channels.
Danke!
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.