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-Menu unzuverlässig

 

Chris_ing86
Forum-Newbie

Forum-Newbie


Beiträge: 5
Anmeldedatum: 03.08.12
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 03.08.2012, 15:45     Titel: Popup-Menu unzuverlässig
  Antworten mit Zitat      
Hallo, ich habe in MATLAB ohne GUIDE eine figure mit Labels und Pop-Up-Menus erstellt. Das oberste der 3 Popups ist immer sichtbar, das mittlere habe ich 2 mal geklont. Je nach Eingabe im obersten wird ein Popup der 3 Klone nur sichtbar. Wenn ich das Programm starte, ändert sich die sichtbarkeit der Popups aber nur wenn ich im obersten Menü z.B. erst den 2. dann den 3. Eintrag wähle. Klicke ich danach wieder auf den 1. Eintrag ändert sich nix. Wisst ihr Rat?

Code:
function HDR_Gui()
 
% Figure erstellen
GuiHandle = figure('ToolBar', 'None', ...
  'MenuBar', 'None', ...
  'Resize', 'off', ...
  'Name', 'HDR-Bilderzeugung', ...
  'NumberTitle', 'off', ...
  'Position', [500 500 300 200]);
 
% Belichtungszahl-Label erstellen
f1 = uicontrol(GuiHandle, 'Style', 'text', ...
       'Position', [10 150 130 25], ...
       'String', 'Anzahl Belichtungszeiten:', ...
       'HorizontalAlignment', 'Left');
 
% Belichtungszahl-Dropdown-Feld erstellen
f{2} = uicontrol(GuiHandle, 'Style', 'PopupMenu', ...
       'Position', [150 130 100 50], ...
       'String', {'3', '5', '7'},...
       'Callback', @popup_menu_Callback);

% Auswahl-Label erstellen
f{3} =uicontrol(GuiHandle, 'Style', 'text', ...
  'Position', [10 100 130 25], ...
  'String', 'Genutzte Bilder:', ...
  'HorizontalAlignment', 'Left');
 
% 3er-Auswahl-Dropdown-Feld erstellen
f{4} =uicontrol(GuiHandle, 'Style', 'PopupMenu', ...
  'Position', [150 80 100 50], ...
  'String', {'1-2-3', '2-3-4', '3-4-5', '4-5-6', '5-6-7', '1-3-5', '3-5-7'});

% 5er-Auswahl-Dropdown-Feld erstellen
f{5} =uicontrol(GuiHandle, 'Style', 'PopupMenu', ...
  'Position', [150 80 100 50], ...
  'String', {'1-2-3-4-5', '2-3-4-5-6', '3-4-5-6-7'},'visible','off');

% 7er-Auswahl-Dropdown-Feld erstellen
f{6} =uicontrol(GuiHandle, 'Style', 'PopupMenu', ...
  'Position', [150 80 100 50], ...
  'String', {'1-2-3-4-5-6-7'},'visible','off');

% Algorithmus-Label erstellen
f7 =uicontrol(GuiHandle, 'Style', 'text', ...
  'Position', [10 50 130 25], ...
  'String', 'Algorithmus:', ...
  'HorizontalAlignment', 'Left');
 
% Algorithmus-Dropdown-Feld erstellen
f8 =uicontrol(GuiHandle, 'Style', 'PopupMenu', ...
  'Position', [150 30 100 50], ...
  'String', {'Reinhard', 'Stockham'});

% Button erstellen
f9 =uicontrol(GuiHandle, 'Style', 'PushButton', ...
  'Position', [80 10 175 25], ...
  'String', 'Starte HDR-Erzeugung', ...
  'Callback', @OnStartClick);

function popup_menu_Callback(GuiHandle, eventdata)
      % Determine the selected data set.
      idx = get(f{2}, 'Value');   % Liefert Index des aktiven Elements
      str = get(f{2}, 'String');  % Liefert alle gespeichern Strings
      choice = str{idx};                 % Liefert aktiven Eintrag
      % Set current data to the selected data set.
      switch choice
      case '3' % User selects Peaks.
         set(f{5},'visible','off');
         set(f{4},'visible','on');
      case '5' % User selects Membrane.
         set(f{4},'visible','off');
         set(f{5},'visible','on');
      case '7' % User selects Sinc.
         set(f{5},'visible','off');
         set(f{6},'visible','on');
      end
end
 
% Figure darstellen
set(GuiHandle, 'Visible', 'on');

end
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: 03.08.2012, 18:53     Titel:
  Antworten mit Zitat      
Hallo,

wenn du das so programmieren möchtest, musst du sicherstellen, dass jeweils die beiden anderen Popups unsichtbar sind:

Code:
switch choice
      case '3' % User selects Peaks.
         set(f{6},'visible','off')
         set(f{5},'visible','off');
         set(f{4},'visible','on');
      case '5' % User selects Membrane.
         set(f{4},'visible','off');
         set(f{6},'visible','off');
         set(f{5},'visible','on');
      case '7' % User selects Sinc.
          set(f{4},'visible','off');
         set(f{5},'visible','off');
         set(f{6},'visible','on');
      end


Grüße,
Harald
Private Nachricht senden Benutzer-Profile anzeigen
 
Chris_ing86
Themenstarter

Forum-Newbie

Forum-Newbie


Beiträge: 5
Anmeldedatum: 03.08.12
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 03.08.2012, 20:14     Titel:
  Antworten mit Zitat      
Ach na klar, vielen Dank. Jetzt klappts super!
Private Nachricht senden Benutzer-Profile anzeigen
 
Chris_ing86
Themenstarter

Forum-Newbie

Forum-Newbie


Beiträge: 5
Anmeldedatum: 03.08.12
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 08.08.2012, 14:54     Titel:
  Antworten mit Zitat      
Hab leider schon wieder ein anderes Problem mit dem Projekt:

wenn der Pushbutton gedrückt wird soll sich der Zustand einer Variabel von 0 auf 1 ändern. Habe das so geschrieben:

Code:
function x = HDR_Gui()
x = 0;

% Figure erstellen
GuiHandle = figure('ToolBar', 'None', ...
  'MenuBar', 'None', ...
  'Resize', 'off', ...
  'Name', 'HDR-Bilderzeugung', ...
  'NumberTitle', 'off', ...
  'Position', [500 500 300 200]);
 
% Belichtungszahl-Label erstellen
f{1} = uicontrol(GuiHandle, 'Style', 'text', ...
       'Position', [10 150 130 25], ...
       'String', 'Anzahl Belichtungszeiten:', ...
       'HorizontalAlignment', 'Left');
 
% Belichtungszahl-Dropdown-Feld erstellen
f{2} = uicontrol(GuiHandle, 'Style', 'PopupMenu', ...
       'Position', [150 130 100 50], ...
       'String', {'3', '5', '7'},...
       'Callback', @popup_menu_Callback);

% Auswahl-Label erstellen
f{3} =uicontrol(GuiHandle, 'Style', 'text', ...
  'Position', [10 100 130 25], ...
  'String', 'Genutzte Bilder:', ...
  'HorizontalAlignment', 'Left');
 
% 3er-Auswahl-Dropdown-Feld erstellen
f{4} =uicontrol(GuiHandle, 'Style', 'PopupMenu', ...
  'Position', [150 80 100 50], ...
  'String', {'1-2-3', '2-3-4', '3-4-5', '4-5-6', '5-6-7', '1-3-5', '3-5-7'});

% 5er-Auswahl-Dropdown-Feld erstellen
f{5} =uicontrol(GuiHandle, 'Style', 'PopupMenu', ...
  'Position', [150 80 100 50], ...
  'String', {'1-2-3-4-5', '2-3-4-5-6', '3-4-5-6-7'},'visible','off');

% 7er-Auswahl-Dropdown-Feld erstellen
f{6} =uicontrol(GuiHandle, 'Style', 'PopupMenu', ...
  'Position', [150 80 100 50], ...
  'String', {'1-2-3-4-5-6-7'},'visible','off');

% Algorithmus-Label erstellen
f{7} =uicontrol(GuiHandle, 'Style', 'text', ...
  'Position', [10 50 130 25], ...
  'String', 'Algorithmus:', ...
  'HorizontalAlignment', 'Left');
 
% Algorithmus-Dropdown-Feld erstellen
f{8} =uicontrol(GuiHandle, 'Style', 'PopupMenu', ...
  'Position', [150 30 100 50], ...
  'String', {'Reinhard', 'Stockham'});

% Button erstellen
f{9} =uicontrol(GuiHandle, 'Style', 'PushButton', ...
  'Position', [80 10 175 25], ...
  'String', 'Starte HDR-Erzeugung', ...
  'Callback', @OnStartClick);


function popup_menu_Callback(GuiHandle, eventdata)
      % Determine the selected data set.
      idx = get(f{2}, 'Value');   % Liefert Index des aktiven Elements
      str = get(f{2}, 'String');  % Liefert alle gespeichern Strings
      choice = str{idx};          % Liefert aktiven Eintrag
      % Set current data to the selected data set.
      switch choice
      case '3'
         set(f{6},'visible','off');
         set(f{5},'visible','off');
         set(f{4},'visible','on');
      case '5'
         set(f{4},'visible','off');
         set(f{5},'visible','on');
         set(f{6},'visible','off');
      case '7'
         set(f{4},'visible','off');
         set(f{5},'visible','off');
         set(f{6},'visible','on');
      end
end
 
% Figure darstellen
set(GuiHandle, 'Visible', 'on');



function OnStartClick(GuiHandle, eventdata)
 x = 1;
 x
 close all
end
end


in meinem Hauptskript soll dann solange alle 5 Seks "Hallo ausgegeben werden, bis der Button gedrückt wurde und sich der Zustand ändert.

Hier der Hauptcode:

x = HDR_Gui();


Code:
while x ~= 1
pause(5);'Hallo'
end

'Weiter'


Aber selbst wenn ich den Button gedrückt habe, gibt er ewig weiter "Hallo" aus und in der Statusleiste steht ewig "Busy".

Was mache ich falsch?
Private Nachricht senden Benutzer-Profile anzeigen
 
Marco H.
Forum-Guru

Forum-Guru


Beiträge: 404
Anmeldedatum: 12.11.10
Wohnort: Dortmund
Version: 2010a/2012b
     Beitrag Verfasst am: 08.08.2012, 21:04     Titel:
  Antworten mit Zitat      
Hey Chris,
naja das klappt nicht weil du mit verschiedenen workspaces arbeitest. Zudem bekommst du von einem Callback nicht ohne weiteres einen Parameter zurückübergeben. Bei Callbacks arbeitet man ja ehr mit guidata oder setappdata/getappdata um die Variablen in unterschiedlichen Workspaces (Callbacks) nutzen zu können. Zudem würde ich das auch nicht mit einer while Schleife realisieren sondern ehr mit einem Timer. Des weiteren ist bei einem Callback die erste übergebene Variable immer das Handle vom ausgelösten Objekt und nicht wie bei dir irreführend als GuiHandle bezeichneten figure handle. What ever ich würde es wie folgt machen:
Code:

% Aufrufen aus Hauptprogramm
uiwait(HDR_Gui);

% Gui File
function GuiHandle = HDR_Gui
t = timer('TimerFcn',@mycallback, 'Period', 5,'ExecutionMode','fixedRate');
start(t)

% Figure erstellen
GuiHandle = figure('ToolBar', 'None', ...
    'MenuBar', 'None', ...
    'Resize', 'off', ...
    'Name', 'HDR-Bilderzeugung', ...
    'NumberTitle', 'off', ...
    'Position', [500 500 300 200],...
    'CloseRequestFcn',@CloseRequestFcn);

% Belichtungszahl-Label erstellen
f{1} = uicontrol(GuiHandle, 'Style', 'text', ...
    'Position', [10 150 130 25], ...
    'String', 'Anzahl Belichtungszeiten:', ...
    'HorizontalAlignment', 'Left');

% Belichtungszahl-Dropdown-Feld erstellen
f{2} = uicontrol(GuiHandle, 'Style', 'PopupMenu', ...
    'Position', [150 130 100 50], ...
    'String', {'3', '5', '7'},...
    'Callback', @popup_menu_Callback);

% Auswahl-Label erstellen
f{3} =uicontrol(GuiHandle, 'Style', 'text', ...
    'Position', [10 100 130 25], ...
    'String', 'Genutzte Bilder:', ...
    'HorizontalAlignment', 'Left');

% 3er-Auswahl-Dropdown-Feld erstellen
f{4} =uicontrol(GuiHandle, 'Style', 'PopupMenu', ...
    'Position', [150 80 100 50], ...
    'String', {'1-2-3', '2-3-4', '3-4-5', '4-5-6', '5-6-7', '1-3-5', '3-5-7'});

% 5er-Auswahl-Dropdown-Feld erstellen
f{5} =uicontrol(GuiHandle, 'Style', 'PopupMenu', ...
    'Position', [150 80 100 50], ...
    'String', {'1-2-3-4-5', '2-3-4-5-6', '3-4-5-6-7'},'visible','off');

% 7er-Auswahl-Dropdown-Feld erstellen
f{6} =uicontrol(GuiHandle, 'Style', 'PopupMenu', ...
    'Position', [150 80 100 50], ...
    'String', {'1-2-3-4-5-6-7'},'visible','off');

% Algorithmus-Label erstellen
f{7} =uicontrol(GuiHandle, 'Style', 'text', ...
    'Position', [10 50 130 25], ...
    'String', 'Algorithmus:', ...
    'HorizontalAlignment', 'Left');

% Algorithmus-Dropdown-Feld erstellen
f{8} =uicontrol(GuiHandle, 'Style', 'PopupMenu', ...
    'Position', [150 30 100 50], ...
    'String', {'Reinhard', 'Stockham'});

% Button erstellen
f{9} =uicontrol(GuiHandle, 'Style', 'PushButton', ...
    'Position', [80 10 175 25], ...
    'String', 'Starte HDR-Erzeugung', ...
    'Callback', @OnStartClick);


    function popup_menu_Callback(hObj, eventdata)
        % Determine the selected data set.
        idx = get(f{2}, 'Value');   % Liefert Index des aktiven Elements
        str = get(f{2}, 'String');  % Liefert alle gespeichern Strings
        choice = str{idx};          % Liefert aktiven Eintrag
        % Set current data to the selected data set.
        switch choice
            case '3'
                set(f{6},'visible','off');
                set(f{5},'visible','off');
                set(f{4},'visible','on');
            case '5'
                set(f{4},'visible','off');
                set(f{5},'visible','on');
                set(f{6},'visible','off');
            case '7'
                set(f{4},'visible','off');
                set(f{5},'visible','off');
                set(f{6},'visible','on');
        end
    end


    function OnStartClick(hObj, eventdata)
        stop(t)
        delete(t)
        'Weiter'
        delete(GuiHandle)
    end

    function mycallback(hObj,evd)
        'Hallo'
    end

    function CloseRequestFcn(hObj,evd)
        'Abgebrochen'
        stop(t)
        delete(t)
        delete(hObj)
    end

end
 

Falls du Variablen von der GUI in dein Hauptprogramm übergeben willst könntest du mit setappdata/getappdata arbeiten...
Greetings
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.