GUI :erstellen und Funktionalität von Checkbox und Popupmen
Milka
Gast
Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
Verfasst am: 31.07.2015, 15:17
Titel: GUI :erstellen und Funktionalität von Checkbox und Popupmen
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]);
% 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')
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
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]);
% 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
du gibst hier an, dass checkbox_Callback als Callback aufgerufen werden soll. Dann musst du entweder diesen Befehl anpassen oder die Funktion definieren.
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
Milka
Gast
Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
Verfasst am: 03.08.2015, 11:43
Titel:
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.
Einstellungen und Berechtigungen
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
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.