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

GUI - zwei Popup menus

 

kanimbla
Forum-Newbie

Forum-Newbie


Beiträge: 7
Anmeldedatum: 02.09.14
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 02.09.2014, 07:31     Titel: GUI - zwei Popup menus
  Antworten mit Zitat      
Hi,

Popup menu 1 definiert eine Anzahl von Ländern und Popup menu 2 definiert einige Variablen, wobei jede Variable für jedes Land grafisch dargestellt werden soll.

Beispiel: Land='US','Japan' (Popup menu 1), Variable='GDP','Trade Balance' (Popup menu 2)

Bei obigem Beispiel würde ich gern mit Hilfe eines Push buttons vier separate Plots erstellen: US/GDP, US/Trade Balance, Japan/GDP, Japan/Trade Balance

Die vier Datenreihen sind in einer matrix gespeichert. Ich bekomme es bisher leider nicht hin, den Inhalt zweier Popup menus zu verbinden. Für hilfreiche Hinweise wäre ich sehr dankbar!!!

Anbei mein fehlerhafter Code:

Code:

function example_gui

f = figure('Visible','off','Position',[260,500,800,485]);

% Construct the components.
hplot = uicontrol('Style','pushbutton','String','Figure','Position',[615,420,100,25],'Callback',{@plot_Callback});

hpopup = uicontrol('Style','popupmenu','String',{'US','Japan'},'Position',[615,260,100,25],'Callback',{@popup_menu1_Callback});

htext = uicontrol('Style','text','String','Country','Position',[615,300,100,15]);

gpopup = uicontrol('Style','popupmenu','String',{'GDP','Trade Balance'},'Position',[615,180,100,25],'Callback',{@popup_menu2_Callback});

gtext = uicontrol('Style','text','String','Indicator','Position',[615,220,100,15]);
ha = axes('Units','pixels','Position',[50,60,500,385]);

align([hplot,gtext,htext,hpopup,gpopup],'Center','None');

% Change units to normalized so components resize automatically.
set([hplot,gtext,htext,hpopup,gpopup],'Units','normalized');

% Generate the data to plot.
vars=evalin('base','vars') % matrix with dimesnion 4x100
% Assign the GUI a name to appear in the window title.
set(f,'Name','Simple GUI')
% Move the GUI to the center of the screen.
movegui(f,'center')
% Make the GUI visible.
set(f,'Visible','on');

function popup_menu1_Callback(hObject,source,eventdata)
      global data
% Determine the selected data set.
str = get(hObject, 'String');
val = get(hObject, 'Value');
% Set current data to the selected data set.
switch str{val};
case 'US'  
data = vars(1:2,:)
case 'Japan'
data = vars(3:4,:)
end
end

function popup_menu2_Callback(hObject,source,eventdata)
      global data
% Determine the selected data set.
str = get(hObject, 'String');
val = get(hObject, 'Value');
% Set current data to the selected data set.
switch str{val};
case 'GDP'  
data = data(1,:)
case 'Trade Balance'
data = data(2,:)
end
end

function plot_Callback(source,eventdata)
plot(data);
end

end
Private Nachricht senden Benutzer-Profile anzeigen


G-host
Forum-Anfänger

Forum-Anfänger


Beiträge: 11
Anmeldedatum: 19.09.12
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 02.09.2014, 19:09     Titel:
  Antworten mit Zitat      
Wenn ich es richtig verstehe, wählst du im ersten Popupmenu zunächst das Land und entnimmst je nach dem welches Land gewählt wurde zwei Zeilen aus vars und schreibst sie in Data.
Im zweiten Popupmenu wird dann entweder die erste oder die zweite Zeile aus Data gewählt und das ganze dann beim Drücken des Pushbuttons geplottet.

Das ganze wäre dann abhängig von der Reihenfolge in der die Popupmenus ausgewählt werden.
Du könntest stattdessen die gesammte Auswertung in der Funktion des Pushbuttons machen.


Code:
function plot_Callback(source,eventdata)

index = get(hpopup,'Value')
string = get(hpopup,'String')
Land = string(index)

index = get(gpopup,'Value')
string = get(gpopup,'String')
Variable = string(index)

switch Land
case 'US'  
data = vars(1:2,:)
case 'Japan'
data = vars(3:4,:)
end

switch Variable
case 'GDP'  
data = data(1,:)
case 'Trade Balance'
data = data(2,:)
end

plot(data);
Private Nachricht senden Benutzer-Profile anzeigen
 
kanimbla
Themenstarter

Forum-Newbie

Forum-Newbie


Beiträge: 7
Anmeldedatum: 02.09.14
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 02.09.2014, 22:16     Titel:
  Antworten mit Zitat      
Klasse vielen Dank, exakt so wollte ich es haben!

Die einzige kleine Modifikation ist, dass 'string{index}' mit geschwungener Klammer (statt runder Klammer) geschrieben werden muss.

Beste Grüße
Private Nachricht senden Benutzer-Profile anzeigen
 
kanimbla
Themenstarter

Forum-Newbie

Forum-Newbie


Beiträge: 7
Anmeldedatum: 02.09.14
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 03.09.2014, 08:52     Titel:
  Antworten mit Zitat      
Noch ein Frage hinsichtlich des oben genannten Beispiels.

Wenn ich das gleiche GUI fuer eine Vielzahl von Laendern und Variablen aufsetzen wollte, muesste ich dann jeden einzelnen 'case' manuell eingeben (was sehr zeitaufwendig waere) oder gibt es eine effizientere Loesung (z.B. loop)?

Wenn ich richtig informiert bin, kann 'case' leider nicht in einen loop eingebunden werden. Daher frage ich mich, was eine effiziente Alternative sein koennte.
Private Nachricht senden Benutzer-Profile anzeigen
 
G-host
Forum-Anfänger

Forum-Anfänger


Beiträge: 11
Anmeldedatum: 19.09.12
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 03.09.2014, 12:28     Titel:
  Antworten mit Zitat      
Du könntest doch zum Beispiel nicht über den Ländername gehen, sondern über den gewählten index, dann kannst du dir switch komplett sparen.

USA -> index = 1 -> Zeilen 1 und 2 =
Code:
vars(2*index-1:2*index,:)

Japan -> index = 2 -> Zeilen 3 und 4 =
Code:
vars(2*index-1:2*index,:)
Private Nachricht senden Benutzer-Profile anzeigen
 
kanimbla
Themenstarter

Forum-Newbie

Forum-Newbie


Beiträge: 7
Anmeldedatum: 02.09.14
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 03.09.2014, 14:18     Titel:
  Antworten mit Zitat      
Diese Loesung ist ja noch deutlich eleganter als eine Schleife.

Exzellent, danke!
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.