Verfasst am: 23.01.2015, 12:54
Titel: Handles in programmierter GUI übergeben
Hallo zusammen,
ich schreibe gerade ein GUI und bekomme es nicht hin, das Handles richtig zurückzugeben.
Ich habe ein Hauptgui (zum ersten mal selbst programmiert sonst immer GUIDE benutzt) in dieser gebe ich eine Menge Slider aus. Ich möchte jetzt die Slider filtern. Dh. ich gehe oben ins Menu dort auf Settings und es öffnet sich sich ein neues Fenster dort habe ich Checkboxen. Ich suche mir also aus welche Slider ich angezeigt bekommen will, drücke auf OK, das Fenster schließt sich und auf dem Hauptgui werden nur noch die angezeigt die ich auch haben möchte. Also nichts besonderes.
Deklaration des Menueintrags
Code:
% Im Vorfeld erstelltes Handles Struct. figObj ist der Name des Hauptgui Fensters (figObj = figure(...))
h = guihandles(figObj);
Ist es richtig, dass ich an diesen Callback das handles übergeben muss? Ich benutze in der Funktion guidata somit bekomme ich das Handles Struct. Also müsste ich es meiner Meinung nach nicht tun. Die Frage ist was genau das src bzw das hObject ist und woher es kommt.
Die Callback Funktion
Code:
function MenuThresholds_Callback(src,eventdata,h) % Die Zeile holt mir doch das handles aus dem src.
h = guidata(src);
% Das neue Fenster in dem ich den Filter setze. Ich übergebe das Handles und erwarte es auch zurück
h = NewConfigurationSet_Thresholds(h);
% Methode zum platzieren der Slider (Die funktioniert auch gut)
UpdateThresholds(src,h);
% Abschliedend noch das handles speichern. Auch hier was ist mit src gemeint guidata(src,h);
% Hier der Zugriff auf das Handles aus der Hauptgui
localList = fieldnames(h.ThresholdsList);
for i=1:size(localList,1) % Hier gebe ich alle Elemente mit einer Checkbox aus end
% Auch hier muss das h meiner Meinung nach nicht übergeben werden, wenn ich verstanden habe wie ich das src richtig nutzen kann
pushOK = uicontrol('style','pushbutton','string','OK','position',[120,10,120,30],'Callback',{@buttonOK_Callback,h});
% Was könnte ich anstatt von gcf schreiben? Ich meine gcf ist die akuelle Figure aber wie könnte ich es sonst ausdrücken? (Hier gehts mir um das Verständnis)
uiwait(gcf);
function h = buttonOK_Callback(src,eventdata,h)
localList = fieldnames(h.ThresholdsList);
for i=1:size(localList,1) % Hier schreibe ich in das Handles % h.ThresholdsList.(...).Enabled = ... end
% Hier muss ich jetzt vor der uiresume irgendwie h speichern. % Ich habe src benutzt, was aber falsch ist, weil ich es nicht ganz verstanden habe guidata(src,h) uiresume(gcf);
close(gcf);
Sind jetzt ein paar Fragen, die mir die Arbeit deutlich erleichern könnten.
Grüße
stealth
edit:
ich habe jetzt verstanden das src das Object ist, welches die Methode aufruft. Aber wie kann ich h = guidata(src) benutzten, wenn src meiner Meinung nach nichts mit dem eigentlichen handles zu tun hat?!
Hab es selbst hinbekommen. Musste mich nur in handles und hObject einlesen. Dann fielen einem die ganzen Fehler auf.
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.