Verfasst am: 13.05.2020, 11:54
Titel: Popup-Menus aktualisieren bei Änderung der Auswahl
Hallo zusammen!
Ich bin noch recht neu in Matlab und erst recht beim Thema GUI´s.
Ich hab mich jetzt schon bereits zwei Tage durchs Internet gelesen und diese Problematik auch gefunden, aber kriege es für meinen Fall nicht gelöst.
Ich schreibe ein GUI mithilfe von GUIDE, in dem der Anwender zunächst per uigetfile einen recht großen Datensatz auswählen kann. Nun kann er mithilfe von mehreren Popup-Menus die Daten so filtern, dass er am Ende das Ergebnis für die Parameter bekommt, die er haben möchte. Generell funktioniert das auch schon sehr gut.
Es gibt insgesamt 5 Popupmenus. Jedes einzelne baut von seiner Berechnung her auf dem vorherigen auf, sprich verarbeitet die handles, die das vorherige Menu ausgibt.
Jetzt gibt es jedoch folgendes Problem:
Wenn ich die Auswahl von z.B. nur dem ersten Popupmenu per Click ändere, bleibt mein Ergebnis, wenn ich es am Ende plotte, genau gleich. Wenn ich jedoch die folgenden Popupmenus erneut auswähle, kommt auch am Ende das passende Ergebnis heraus.
Wie bekomme ich es also hin, dass die nachfolgenden Callbacks automatisch ausgeführt werden, sprich der aktuelle Stand aktualisiert wird, wenn auch nur ein einzelnes Popupmenu bedient wurde? Oder wie sollte ich das am besten machen?
Hier einmal etwas vereinfacht mein Code:
Code:
% --- Executes on selection change in Callback1. function Callback1_Callback(hObject, eventdata, handles)
contents=cellstr(get(hObject,'String'));
pop_choice=contents{get(hObject,'Value')};
pop_choice
if(strcmp(pop_choice,'0'))
x1 = handles.Matrix(handles.Matrix(:,1)<1,:)
handles.x1=x1
elseif(strcmp(pop_choice,'2'))
x1 = handles.Matrix(handles.Matrix(:,1)>1 & handles.Matrix(:,1)<3,:)
handles.x1=x1
generell ist die Empfehlung inzwischen, mit App Designer statt mit GUIDE zu arbeiten.
Was heißt "am Ende plotten"?
In den Callbacks wird genau das gemacht, was du angibst. Da in deinen Callbacks keine plot-Befehle enthalten sind, wird auch nichts neu geplottet. Meine Empfehlung wäre, die Aktualisierung des Plots in eine Funktion zu packen und diese immer aufzurufen, wenn der Plot akutalisiert werden soll.
Du kannst auch aus einem Callback heraus einen anderen aufrufen. Ob das im Einzelfall so sinnvoll ist, ist die andere Frage.
Grüße,
Harald
_________________
1.) Ask MATLAB Documentation
2.) Search gomatlab.de, google.de or MATLAB Answers
3.) Ask Technical Support of MathWorks
4.) Go mad, your problem is unsolvable ;)
Ich kann leider kein App Designer nutzen, da ich nur eine ältere Matlab Version zur Verfügung habe...
Mit "am Ende plotten" meine ich, dass der Plot im Code nach dem letzten Popupmenu kommt. Es wird das geplottet, was das letzte (sprich 5.) Popupmenu ausgibt.
Da aber Popupmenu 5 nur dann ausgeführt wird, wenn dieses geklickt wird, bleibt der Plot leider gleich, wenn nur Popupmenu 1 geändert wird.
Wenn ich nur Popupmenu 1 ändere, die restliche Auswahl aber gleich bleibt, soll folgendes passieren:
Popupmenu 2 merkt, dass sich die Eingabedaten ändern, und führt seine Berechnung entsprecht der gleichgebliebenen Auswahl von Popup2 mit jedoch anderen Daten, die es aus Popup 1 erhält, neu aus.
3 tut dasselbe, 4 auch, 5 auch...
man drückt plot und alles ist super...naja das ist der Plan. Ich hoffe, es ist verständlich
ich habe bereits probiert, im Callback vom Plotbutton die Callbacks von Popupmenu 1-5 hintereinander auszuführen. Dann kommt zwar keine Fehlermeldung, aber ich kann im Command Window sehen, dass keine neuen Endwerte berechnet wurden, sondern noch immer die alten...
da ich nur eine ältere Matlab Version zur Verfügung habe...
Das bitte bei den Fragen angeben oder im Profil eintragen.
Zitat:
ich habe bereits probiert, im Callback vom Plotbutton die Callbacks von Popupmenu 1-5 hintereinander auszuführen. Dann kommt zwar keine Fehlermeldung, aber ich kann im Command Window sehen, dass keine neuen Endwerte berechnet wurden, sondern noch immer die alten...
Wenn du das nach dem guidata-Befehl ausführst, sollte es klappen.
Grüße,
Harald
_________________
1.) Ask MATLAB Documentation
2.) Search gomatlab.de, google.de or MATLAB Answers
3.) Ask Technical Support of MathWorks
4.) Go mad, your problem is unsolvable ;)
danke für die Ratschläge!
Ich habe das Problem inzwischen anders gelöst.
Ich lasse mir in den Popupmenüs nur die Auswahl ausgeben.
Im Callback meines Plotbuttons führe ich dann erst alle Rechnungen durch und zwar je nach getroffener Auswahl in den vorherigen Popups Dadurch stelle ich sicher, dass stets die aktuellen Daten für die Rechnungen benutzt werden.
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.