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

Pop-Up Auswahl abhängig von vorheriger Pop-Up Auswahl

 

XERI
Forum-Newbie

Forum-Newbie


Beiträge: 6
Anmeldedatum: 16.02.11
Wohnort: Bielefeld
Version: ---
     Beitrag Verfasst am: 24.02.2011, 12:00     Titel: Pop-Up Auswahl abhängig von vorheriger Pop-Up Auswahl
  Antworten mit Zitat      
Hallo zusammen,

ich versuche mir gerade als GUI-Neuling eine Eingabemaske für ein Simulationsmodell aufzubauen.
Dabei möchte ich über 2 Pop-Up Menus Eingangsparameter für die weitere Berechnung auswählen. Allerdings soll die Auswahl des 2. Pop-Ups von der Auswahl des ersten Pop-Ups abhängig sein. Im ersten Pop-Up stehen 6 Einträge, die im 2. Pop-up drei unterschiedliche Auswahlmöglichkeiten hervorrufen sollen.

Beispiel:
Auswahl 1.Pop-Up
1
2
3
4
5
6

Wähle ich 1 aus soll im 2. Pop-Up folgendes angezeigt werden:
A
B

Wähle ich 2, 3, oder 4 aus:
C
D
E

Wähle ich 5 oder 6 aus:
A
B
C
D
E
F


Wie könnte ich so etwas aufbauen?

Mit diesem Code aus dem Forum bin ich nicht so recht weiter gekommen.
Code:
pop1 = {'das';'ist';'ein Test'};
handles.pop21 = {'das';'ist';'das';'erste Element'};
handles.pop22 = {'Danke';'für';'die';'Hilfe'};

pop1 = uicontrol('Style','popup','string',pop1,'Callback',@popupselect);
handles.pop2 = uicontrol('Style','popup');
function popupselect(handles,eventdata)

val = get(hObject,'Value');
switch val
    case 1
        set(handles.pop2,'String',handles.pop21);
    case 2
        set(handles.pop2,'String',handles.pop22);
end

end
 


Vielen Dank für eure Hilfe Smile

Gruß XERI
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: 24.02.2011, 12:32     Titel:
  Antworten mit Zitat      
Hallo,

das Beispiel erklärt eigentlich genau, was gemacht werden muss.
Hast du konkrete Fragen?

Implementierst du deine GUI mit GUIDE oder programmatisch?

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
 
XERI
Themenstarter

Forum-Newbie

Forum-Newbie


Beiträge: 6
Anmeldedatum: 16.02.11
Wohnort: Bielefeld
Version: ---
     Beitrag Verfasst am: 24.02.2011, 12:43     Titel:
  Antworten mit Zitat      
Hallo,

danke schonmal.

Meine GUI implementiere ich mit GUIDE.
Ich glaube mein Hauptproblem ist, dass ich nicht genau weiß, wo ich den Code einfügen muss. Ich hatte es in der Opening Function des GUI probiert, das hat nicht geklappt, aber im Callback des ersten Pop-Ups erschien mir irgendwie unlogisch. Ich denke wenn ich wüsste wo ich den Code einfügen muss, wäre das Problem gelöst.

Danke.

Gruß
XERI
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: 24.02.2011, 12:50     Titel:
  Antworten mit Zitat      
Hallo,

jetzt kommen wir der Sache näher.
Da (wenn ich das richtig verstanden habe) die Auswahl durch den Nutzer im ersten Popupmenü die Veränderung im zweiten Popupmenü bewirken soll, muss der Code in den Callback für das erste Popupmenü - denn dieser wird ja ausgelöst, wenn der Nutzer eine Auswahl trifft.

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
 
XERI
Themenstarter

Forum-Newbie

Forum-Newbie


Beiträge: 6
Anmeldedatum: 16.02.11
Wohnort: Bielefeld
Version: ---
     Beitrag Verfasst am: 24.02.2011, 13:18     Titel:
  Antworten mit Zitat      
Hallo,

anscheinend stehe ich grad mächtig aufm Schlauch Smile
Ich habe jetzt den kompletten Code in den Callback vom ersten Pop-Up geschrieben. Jetzt habe ich zwei leere Pop-Up Menus.

Code:
popupmenu_Schlepper = {'keine Auswahl';'Schlepper1';'Schlepper2';'Schlepper3';'Schlepper4';'Schlepper5'};
handles.popupmenu_Reifen1 = {'800/65 R32';'900/60 R32';'650/85 R38';'710/70 R38';'800/70 R38';'900/60 R38';'710/70 R42';'900/50 R42'};
handles.popupmenu_Reifen2 = {'800/65 R32';'900/60 R32';'650/85 R38';'710/70 R38';'710/85 R38';'800/70 R38';'900/60 R38';'710/70 R42';'710/75 R42';'900/50 R42';'900/60 R42'};
handles.popupmenu_Reifen3 = {'keine Auswahl'};
popupmenu_Schlepper = uicontrol('Style','popup','string',popupmenu_Schlepper,'Callback',@popupselect);
handles.popupmenu_Reifen = uicontrol('Style','popup');
function popupselect(handles,eventdata)

val = get(hObject,'Value');
switch val
    case 1
        set(handles.popupmenu_Reifen,'String',handles.popupmenu_Reifen3);
    case 2
        set(handles.popupmenu_Reifen,'String',handles.popupmenu_Reifen1);
    case 3
        set(handles.popupmenu_Reifen,'String',handles.popupmenu_Reifen1);
    case 4
        set(handles.popupmenu_Reifen,'String',handles.popupmenu_Reifen1);    
    case 5
        set(handles.popupmenu_Reifen,'String',handles.popupmenu_Reifen2);
    case 6
        set(handles.popupmenu_Reifen,'String',handles.popupmenu_Reifen2);    
end
 


Kann es sein, dass ich alles was vor "function popuselect" steht in die Opening Function schreiben muss, oder muss es wo ganz anders hin?

Danke

Gruß
XERI
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: 24.02.2011, 13:50     Titel:
  Antworten mit Zitat      
Hallo,

vor allem wirft die GUI jetzt wohl auch Fehler?
Genau genommen sollte ein Teil in die Opening Fcn, der Rest in den Callback. Ich versuchs mal:
In die Opening Fcn (vor dem Standardbefehl "guidata(hObject, handles);"):
Code:
handles.popupmenu_Reifen1 = {'800/65 R32';'900/60 R32';'650/85 R38';'710/70 R38';'800/70 R38';'900/60 R38';'710/70 R42';'900/50 R42'};
handles.popupmenu_Reifen2 = {'800/65 R32';'900/60 R32';'650/85 R38';'710/70 R38';'710/85 R38';'800/70 R38';'900/60 R38';'710/70 R42';'710/75 R42';'900/50 R42';'900/60 R42'};
handles.popupmenu_Reifen3 = {'keine Auswahl'};


In den Callback des ersten Popupmenüs (etwas entschlackt):
Code:
val = get(hObject,'Value');
switch val
    case 1
        set(handles.popupmenu_Reifen, 'String', handles.popupmenu_Reifen3);
    case {2, 3, 4}
        set(handles.popupmenu_Reifen,'String',handles.popupmenu_Reifen1);      
    case {5,6}
        set(handles.popupmenu_Reifen,'String',handles.popupmenu_Reifen2);

Wenn das nicht klappen sollte, poste doch bitte die gesamte Anwendung (.fig + .m - Files), und ich schau mir das nochmal genauer an.

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
 
XERI
Themenstarter

Forum-Newbie

Forum-Newbie


Beiträge: 6
Anmeldedatum: 16.02.11
Wohnort: Bielefeld
Version: ---
     Beitrag Verfasst am: 24.02.2011, 13:59     Titel:
  Antworten mit Zitat      
Hallo Harald,

hab deinen Code eingefügt und es funktioniert perfekt.

Vielen Dank für deine schnelle Hilfe ! Very Happy

Gruß
XERI
Private Nachricht senden Benutzer-Profile anzeigen
 
XERI
Themenstarter

Forum-Newbie

Forum-Newbie


Beiträge: 6
Anmeldedatum: 16.02.11
Wohnort: Bielefeld
Version: ---
     Beitrag Verfasst am: 24.02.2011, 15:59     Titel: Folgeproblem
  Antworten mit Zitat      
Hallo,

aufgrund der eingeschränkten Auswahl hat sich jetzt ein neues Problem ergeben. Dadurch, dass in der Auswahlliste jetzt Einträge fehlen bekomme ich jetzt einen anderen Wert als "Value" als zuvor. Dies führt zu Problemen im weiteren Programmablauf.

Kann ich den "Strings" eines Pop-Up Menus feste Ausgabewerte zuweisen?

Vielen Dank.

Gruß
XERI
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: 24.02.2011, 17:33     Titel:
  Antworten mit Zitat      
Hallo,

in deinem Fall würde es wohl eine Notlösung tun:
wenn im ersten Popupmenü die 2.-4. Variante ausgewählt wurden, zähle im zweiten Popupmenü 2 zur gewählten Option dazu - dann passts ja?

Ansonsten müsste man kreativ werden Wink

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
 
XERI
Themenstarter

Forum-Newbie

Forum-Newbie


Beiträge: 6
Anmeldedatum: 16.02.11
Wohnort: Bielefeld
Version: ---
     Beitrag Verfasst am: 25.02.2011, 08:31     Titel:
  Antworten mit Zitat      
Hallo,

leider ist es nicht ganz so einfach, da ich nicht die ersten beiden Einträge aus dem Pop-Up rausnehme sondern in der Mitte einige gelöscht werden. Hab mir jetzt mit einer if-Schleife im Callback des zweiten Pop-Ups geholfen. Ist zwar sicherlich nicht die eleganteste Lösung aber es funktioniert.

Code:
var = get(hObject,'Value');
Schlepper = handles.Schlepper;
    if var == 2 || var == 3 || var == 4 || var == 5
       Bereifung  = get(handles.popupmenu_Reifen,'Value');
    end
    if var == 6 & Schlepper == 2 || Schlepper == 3 || Schlepper == 4
        Bereifung = 7;
    end    
    if var == 7 & Schlepper == 2 || Schlepper == 3 || Schlepper == 4
        Bereifung = 8;
    end  
    if var == 8 & Schlepper == 2 || Schlepper == 3 || Schlepper == 4
        Bereifung = 9;
    end    
    if var == 9 & Schlepper == 2 || Schlepper == 3 || Schlepper == 4
        Bereifung = 11;  
    end  
    if Schlepper == 5 || Schlepper == 6
        Bereifung = get(handles.popupmenu_Reifen,'Value');
    end
 


Trotzdem Danke für deine Hilfe.

Gruß XERI
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 - 2025 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.