WICHTIG: Der Betrieb von goMatlab.de wird privat finanziert fortgesetzt. - Mehr Infos...

Mein MATLAB Forum - goMatlab.de

Mein MATLAB Forum

 
Gast > Registrieren       Autologin?   

Partner:




Forum
      Option
[Erweitert]
  • Diese Seite per Mail weiterempfehlen
     


Gehe zu:  
Neues Thema eröffnen Neue Antwort erstellen

Popup-Menus aktualisieren bei Änderung der Auswahl

 

ajay
Forum-Newbie

Forum-Newbie


Beiträge: 3
Anmeldedatum: 12.05.20
Wohnort: ---
Version: 2014b
     Beitrag Verfasst am: 13.05.2020, 11:54     Titel: Popup-Menus aktualisieren bei Änderung der Auswahl
  Antworten mit Zitat      
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
   
end
guidata(hObject,handles)

% --- Executes on selection change in Callback2.
function Callback2_Callback(hObject, eventdata, handles)
contents=cellstr(get(hObject,'String')); handles = guidata(hObject);
pop_choice=contents{get(hObject,'Value')};
pop_choice
if (strcmp(pop_choice,'70 kpa'))
x2 = handles.x1(handles.x1(:,6)<76,:)
handles.x2=x2
elseif (strcmp(pop_choice,'80 kpa'))
    x2 = handles.x1(handles.x1(:,6)>76 & handles.x1(:,6)<90,:)
    handles.x2=x2
end
 guidata(hObject,handles)


Vielen Dank Smile
Private Nachricht senden Benutzer-Profile anzeigen


Harald
Forum-Meister

Forum-Meister


Beiträge: 24.495
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 13.05.2020, 12:11     Titel:
  Antworten mit Zitat      
Hallo,

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 ;)
Private Nachricht senden Benutzer-Profile anzeigen
 
ajay
Themenstarter

Forum-Newbie

Forum-Newbie


Beiträge: 3
Anmeldedatum: 12.05.20
Wohnort: ---
Version: 2014b
     Beitrag Verfasst am: 13.05.2020, 12:56     Titel:
  Antworten mit Zitat      
Hey, danke für die flotte Antwort.

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 Very Happy

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...

Kann hier ein Problem mit hObject vorliegen?
Private Nachricht senden Benutzer-Profile anzeigen
 
Harald
Forum-Meister

Forum-Meister


Beiträge: 24.495
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 13.05.2020, 14:52     Titel:
  Antworten mit Zitat      
Hallo,

Zitat:
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 ;)
Private Nachricht senden Benutzer-Profile anzeigen
 
ajay
Themenstarter

Forum-Newbie

Forum-Newbie


Beiträge: 3
Anmeldedatum: 12.05.20
Wohnort: ---
Version: 2014b
     Beitrag Verfasst am: 18.05.2020, 15:03     Titel:
  Antworten mit Zitat      
Hi,

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 Smile Dadurch stelle ich sicher, dass stets die aktuellen Daten für die Rechnungen benutzt werden.
Private Nachricht senden Benutzer-Profile anzeigen
 
Neues Thema eröffnen Neue Antwort erstellen



Einstellungen und Berechtigungen
Beiträge der letzten Zeit anzeigen:

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
.





 Impressum  | Nutzungsbedingungen  | Datenschutz | FAQ | goMatlab RSS Button RSS

Hosted by:


Copyright © 2007 - 2024 goMatlab.de | Dies ist keine offizielle Website der Firma The Mathworks

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.