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 :erstellen und Funktionalität von Checkbox und Popupmen

 

Milka

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 31.07.2015, 15:17     Titel: GUI :erstellen und Funktionalität von Checkbox und Popupmen
  Antworten mit Zitat      
Hallo Zusammen,

ich arbeite seit einigen Tagen mit der grafischen Oberfläche von Matlab und würde mich so freuen, wenn mir jemanden helfen kann.

Ich arbeite mit der Version 2013b von Matlab auf einen 64.Bit windows 7 professional PC.

Im Rahmen einer Messdatenauswertung versuche ich eine GUI mit zwei Koordinatensystemen zu erstellen. Die Eine wird mit Checkboxes gesteuert und die Andere mit einem Popupmenu. Auf das erste Koordinatensystem sollte ein Plot1 erscheinen, wenn Checkbox1 ausgewählt wird und ein Plot2, wenn Checkbox2 ausgewählt wird. Beide Plots sollten angezeigt werden, wenn sowohl Checkbox1 als auch Checkbox2 betätigt sind. Auf das zweite Koordinatensystem sollte das gleiche Spiel laufen nur dieses Mal mit der Hilfe eines Popupmenus.
Nach mehreren Versuchen erhalte ich immer noch kein gutes Ergebnis und immer den gleichen Fehler und zwar:"Undefined function 'checkbox_Callback' for input arguments of type 'double'.
Error while evaluating uicontrol Callback
".
Hier ist mein Code und im Anhang meine Messdatei als txt.
Code:
%function mytestGUI
 % Create and then hide the GUI as it is being constructed.
   f = figure('Visible','off','Position',[0, 300, 550, 550]);
   
 %  Construct the components.
   haxes1 = axes('Units','Pixels','Position',[50, 150, 201, 201]);
   haxes2 = axes('Units','Pixels','Position',[300, 150, 201, 201]);
   hcheckbox1 = uicontrol('Style','checkbox','String','Plot 1',...
                'Position',[100, 78, 101, 23],...
                'Callback',{@checkbox_Callback});
   hcheckbox2 = uicontrol('Style','checkbox','String','Plot 2',...
                'Position',[100, 53, 101, 23],...
                'Callback',{@checkbox_Callback});
   hpopupmenu1 = uicontrol('Style','popupmenu',...
                 'String',{'--Auswahl--','Plot 1','Plot 2'},...
                 'Position',[350, 81, 101, 20],...
                 'Callback',{@popupmenu_Callback});
             
   % Create the data to plot.
   fid=fopen('Messung.csv'); % open CSV
   HEAD = textscan(fid, '%s', 0, 'delimiter',';', 'Headerlines', 4); % scan CSV
   HEAD = fgetl(fid);
   HEAD = regexp(HEAD,';','split');
   DATA = textscan(fid, sprintf('%%%c',ones(1,length(HEAD))*102),'delimiter',';');
   fclose(fid); % close CSV
   DATA = [DATA{:}];    % import DATA
   X = DATA(7:257,[1]); % choose 1.st column of DATA
   Y = DATA(7:257,[3]); % choose 3.rd column of DATA
   Z = DATA(7:257,[2]); % choose 2.nd column of DATA
   
   % Initialize the GUI.
   % Change units to normalized so components resize
   % automatically.
   set([f,haxes1,haxes2,hcheckbox1,hcheckbox2,hpopupmenu1],...
   'Units','normalized');

   %Create a plot in the axes.
   visio = [];
   anzeige = visio;
   kopie = get(anzeige);
   plot1 = plot(X,Y,'r');
   plot2 = plot(X,Z,'g');
   
   % Assign the GUI a name to appear in the window title.
   set(f,'Name','mytestGUI')
   
   % Move the GUI to the center of the screen.
   movegui(f,'center')
   
   % Make the GUI visible.
   set(f,'Visible','on');
   

function popupmenu_Callback(source,eventdata)
  % Determine the selected data set.
   str = get(source, 'String');
   val = get(source,'Value');
   % Set current data to the selected data set.
   switch str{val};
   case '--Auswahl--'
      anzeige = visio;
   case 'Plot 1'
      anzeige = plot1;
   case 'Plot 2'
      anzeige = plot2;
   end
end
 
function checkbox1_Callback(source,eventdata)
   if (get(hObject,'Value')) == 1;
       get(plot1);
   else
       get(visio);
   end
end

function checkbox2_Callback(source,eventdata)
    if (get(hObject,'Value')) == 1;
       get(plot2);
   else
       get(visio);
   end
end

function axis1_Callback(source,eventdata)
    kopie;
end

function axis2_Callback(source,eventdata)
    kopie;
end

end


Ich habe mich auf das folgende Matlab-Beispiel basiert, um meinen Code zu erstellen.
Code:
%function simple_gui2
% SIMPLE_GUI2 Select a data set from the pop-up menu, then
% click one of the plot-type push buttons. Clicking the button
% plots the selected data in the axes.
 
   %  Create and then hide the GUI as it is being constructed.
   f = figure('Visible','off','Position',[360,500,450,285]);
 
   %  Construct the components.
   hsurf = uicontrol('Style','pushbutton','String','Surf',...
          'Position',[315,220,70,25],...
          'Callback',{@surfbutton_Callback});
   hmesh = uicontrol('Style','pushbutton','String','Mesh',...
          'Position',[315,180,70,25],...
          'Callback',{@meshbutton_Callback});
   hcontour = uicontrol('Style','pushbutton',...
          'String','Countour',...
          'Position',[315,135,70,25],...
          'Callback',{@contourbutton_Callback});
   htext = uicontrol('Style','text','String','Select Data',...
          'Position',[325,90,60,15]);
   hpopup = uicontrol('Style','popupmenu',...
          'String',{'Peaks','Membrane','Sinc'},...
          'Position',[300,50,100,25],...
          'Callback',{@popup_menu_Callback});
   ha = axes('Units','Pixels','Position',[50,60,200,185]);
   align([hsurf,hmesh,hcontour,htext,hpopup],'Center','None');
   
   % Create the data to plot.
   peaks_data = peaks(35);
   membrane_data = membrane;
   [x,y] = meshgrid(-8:.5:8);
   r = sqrt(x.^2+y.^2) + eps;
   sinc_data = sin(r)./r;
   
   % Initialize the GUI.
   % Change units to normalized so components resize
   % automatically.
   set([f,ha,hsurf,hmesh,hcontour,htext,hpopup],...
   'Units','normalized');
   %Create a plot in the axes.
   current_data = peaks_data;
   surf(current_data);
   % 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');
 
   %  Callbacks for simple_gui. These callbacks automatically
   %  have access to component handles and initialized data
   %  because they are nested at a lower level.
 
   %  Pop-up menu callback. Read the pop-up menu Value property
   %  to determine which item is currently displayed and make it
   %  the current data.
      function popup_menu_Callback(source,eventdata)
         % Determine the selected data set.
         str = get(source, 'String');
         val = get(source,'Value');
         % Set current data to the selected data set.
         switch str{val};
         case 'Peaks' % User selects Peaks.
            current_data = peaks_data;
         case 'Membrane' % User selects Membrane.
            current_data = membrane_data;
         case 'Sinc' % User selects Sinc.
            current_data = sinc_data;
         end
      end
 
   % Push button callbacks. Each callback plots current_data in
   % the specified plot type.
 
   function surfbutton_Callback(source,eventdata)
   % Display surf plot of the currently selected data.
      surf(current_data);
   end
 
   function meshbutton_Callback(source,eventdata)
   % Display mesh plot of the currently selected data.
      mesh(current_data);
   end
 
   function contourbutton_Callback(source,eventdata)
   % Display contour plot of the currently selected data.
      contour(current_data);
   end
 
end


Ich wäre euch so dankbar, wenn mir einen von euch auf den richtigen Weg bringen könnte.

Danke im Voraus und schönes Wochenende!

Messung.txt
 Beschreibung:

Download
 Dateiname:  Messung.txt
 Dateigröße:  7.25 KB
 Heruntergeladen:  489 mal


Harald
Forum-Meister

Forum-Meister


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

du gibst hier an, dass checkbox_Callback als Callback aufgerufen werden soll. Dann musst du entweder diesen Befehl anpassen oder die Funktion definieren.
Code:
hcheckbox1 = uicontrol('Style','checkbox','String','Plot 1',...
                'Position',[100, 78, 101, 23],...
                'Callback',{@checkbox_Callback});

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



Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 03.08.2015, 08:15     Titel:
  Antworten mit Zitat      
Hallo Harald,
ich habe doch die Funktion checkbox1_callback unten definiert oder meinst du etwas anderes?
 
Milka

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 03.08.2015, 08:18     Titel:
  Antworten mit Zitat      
ich arbeite mit dem GUI zum aller ersten Mal so sorry, wenn ich deine Frage nicht gleich verstehe
 
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.2015, 08:30     Titel:
  Antworten mit Zitat      
Hallo,

du hast checkbox1_Callback definiert, aber nicht checkbox_Callback.

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

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 03.08.2015, 08:52     Titel:
  Antworten mit Zitat      
Ich habe gerade alle angepasst, indem ich jedem checkbox mit seinem callback verbunden habe z.B:
Code:
% hcheckbox1 = uicontrol('Style','checkbox','String','Plot 1',...
                'Position',[100, 78, 101, 23],...
                'Callback',{@checkbox1_Callback});

Ich erhalte aber immer die folgende Fehlermeldung:
Undefined function or variable 'hObject'.

Error in testGUI/checkbox1_Callback (line 7Cool
if (get(hObject,'Value')) == 1;

Error while evaluating uicontrol Callback


Sollte ich lieber eine neue Funktion checkbox_callback definieren und die so anpassen, dass es an allen checkboxen zugewiesen wird?
 
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.2015, 09:18     Titel:
  Antworten mit Zitat      
Hallo,

ist nicht weiter verwunderlich: du versuchst eine Variable zu verwenden, die nicht angelegt wurde. Zum Schreiben von Callbacks siehe z.B.
http://www.mathworks.com/help/matla.....rogrammatic-workflow.html

Gibt es denn einen Grund, warum du die GUI mit Befehlen erstellst statt guide zu verwenden, was gerade für Neulinge sehr viel intuitiver ist?

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

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 03.08.2015, 11:43     Titel:
  Antworten mit Zitat      
ich habe eigentlich mit dem GUIDE erst gearbeitet aber kam nicht zu dem gewünschten Ergebnis. Dann dachte ich mir , ich würde das Ganze besser verstehen, wenn ich den Code selber schreibe, was mir bisher relativ gut gelungen ist. Es fehlt mir nur noch, die Funktionalität der Boxen, besser zu interpretieren und umsetzen zu können.
Danke für die Links, hoffentlich komme ich damit näher zum Ziel.
 
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.