Verfasst am: 23.02.2018, 11:20
Titel: H must be the handle to a figure or figure descendent.
Hallo Ihr Lieben,
ich bin relativ neu in Matlab und könnte eure Hilfe brauchen.
Ich habe schon eine GUI mit GUIDE und Matlab R2009b erstellt was auch super funktioniert hat.
Nun habe ich Matlab R2017b und der selbe Code funktioniert nichtmehr.
Variablen habe ich von Callback zu Callback mit setappdata und getappdata übergeben.
Ich vermute mal dass die Fehlermeldung daran liegt.
Hier mal der Ausschnitt vom Code wo die Fehlermeldung erscheint
Code:
% --- Executes just before GUI_INKA_Vergleich is made visible. function GUI_INKA_Vergleich_OpeningFcn(hObject, eventdata, handles, varargin) % This function has no output args, see OutputFcn. % hObject handle to figure % eventdata reserved - to be defined in a future version of MATLAB % handles structure with handles and user data (see GUIDATA) % varargin command line arguments to GUI_INKA_Vergleich (see VARARGIN)
% Größe der GUI passt sich bei öffnen an die Bildschirmgröße an
ssz = get(0,'screensize');
temp = get(gcf, 'Units');
set(gcf, 'Units', 'Pixels',...
'OuterPosition', [ssz(3)*0.05 ssz(4)*0.1 ssz(3)*0.9 ssz(4)*0.85]);
set(gcf, 'Units', temp);
% UIWAIT makes GUI_INKA_Vergleich wait for user response (see UIRESUME) % uiwait(handles.figure1);
% --- Outputs from this function are returned to the command line. functionvarargout = GUI_INKA_Vergleich_OutputFcn(hObject, eventdata, handles) % varargout cell array for returning output args (see VARARGOUT); % hObject handle to figure % eventdata reserved - to be defined in a future version of MATLAB % handles structure with handles and user data (see GUIDATA)
line87% Get default command line output from handles structure varargout{1} = handles.output;
% --- Executes on selection change in popupmenu1. function popupmenu1_Callback(hObject, eventdata, handles) % hObject handle to popupmenu1 (see GCBO) % eventdata reserved - to be defined in a future version of MATLAB % handles structure with handles and user data (see GUIDATA)
% Hints: contents = cellstr(get(hObject,'String')) returns popupmenu1 contents as cell array % contents{get(hObject,'Value')} returns selected item from popupmenu1
% Alle Variablen im base Workspace werden gelöscht evalin('base', 'clear all');
% Einstellungen und Optionen set(handles.edit1, 'Visible', 'off');
set(handles.edit2, 'Visible', 'off');
set(handles.edit3, 'Visible', 'off');
set(handles.text1, 'Visible', 'off');
set(handles.text2, 'Visible', 'off');
set(handles.radiobutton1, 'Value',1);
% Zwei Messungen können eingelesen werden [name, pfad] = uigetfile('*.DAT','Wählen Sie zwei Messung aus', 'Multiselect', 'on');
save name;
% Wird keine Messung ausgewählt, wird das Programm abgebrochen ifisequal(name,0) disp('Keine Datei ausgewählt.') return end ifisa(name, 'char') warndlg('Es wurde nur eine Messung ausgewählt');
return end
% Waitbar
h = waitbar(0,'Please wait...');
hw=findobj(h,'Type','Patch');
set(hw,'EdgeColor',[0.0780.3380.62],'FaceColor',[0.0780.3380.62])
% Diese Schleife geht nacheinanderdurch die ausgewählten Messungen for ii=1:length(name) % ausgewählte Messungen werden importiert
mdfimport(fullfile(pfad, name{ii}));
%%%%%%%%%%%% waitbar %%%%%%%%%%%% if ii == 1 waitbar((ii - 0.95) / length(name));
else waitbar((ii - 0.815) / length(name));
end % Eingelesenen Daten werden in eine Struktur umgewandelt
S=struktur1();
% S wird zu S'Laufvariable' umbenannt eval([['S' num2str(ii)] '= S']);
% Base Workspace wird gelöscht um neue Messung einzulesen evalin('base', 'clear all');
if ii == 1 waitbar((ii - 0.81) / length(name));
else waitbar((ii - 0.63) / length(name));
end end
% Strukturen werden zur weiteren Auswertung bearbeitet [S1, S2] = struktur2(S1, S2, ii, name);
% Strukturen werden im Base angezeigt
z1=S1; assignin('base', 'z1', z1);
z2=S2; assignin('base', 'z2', z2);
% Array mit Feldnamen der Strukturen
fields=fieldnames(z1); assignin('base', 'fields', fields);
% Array mit Feldnamen wird der Listbox übergeben set(handles.listbox1, 'String', fields);
% Abweichung über die gesmagte Laufzeit, über kleinste Quadrate berechnen
Ges1 = klQuadr(z1, z2);
waitbar((ii - 0.33) / length(name));
% Abweichung über die gesmagte Laufzeit, über Kreuzkorrelation berechnen
Ges2 = XKorr(z1, z2);
waitbar((ii) / length(name));
close(h)
Error using guidata (line 87)
H must be the handle to a figure or figure descendent.
Error in Load_N>@(hObject,eventdata)GUI_INKA_Vergleich('popupmenu1_CreateFcn',hObject,eventdata,guidata(hObject))
Warning: While loading an object of class 'ActionData':
Cannot access method 'ActionData' in class 'matlab.ui.eventdata.ActionData'.
> In Load_N (line 2)
In plot1 (line 11)
In GUI_INKA_Vergleich>pushbutton1_Callback (line 252)
In gui_mainfcn (line 95)
In GUI_INKA_Vergleich (line 42)
In matlab.graphics.internal.figfile.FigFile/read>@(hObject,eventdata)GUI_INKA_Vergleich('pushbutton1_Callback',hObject,eventdata,guidata(hObject))
Was ich nicht so ganz verstehe, ich dass line 87 ein Kommentar ist.
Trotz der Fehlermeldung funktioniert mein Plot. Es öffnet sich allerdings eine neues GUI Fenster für den Plot, aber ohne die Daten in den Listboxen.
Ich hoffe sehr dass jemand den Fehler sieht und mit helfen kann.
Mit den handles kenne ich mich leider noch nicht aus und verstehe daher den Fehler auch nicht!
bitte mal schauen, ob das die komplette Fehlermeldung ist (im Command Window scrollen). Die Zeilenangabe bezieht sich auf die Funktion guidata und nicht auf deinen Code. In aller Regel wird aber auch die Zeilennummer bezogen auf deinen Code angegeben.
Bei setappdata/getappdata würde ich statt 0 generell die GUI an sich verwenden, standardmäßig handles.figure1
Arbeiten mit assignin / evalin sollte bei Verwendung von setappdata/getappdata an sich nicht mehr notwendig sein.
Könnte das sein?
Und warum wird mein Plot nicht im bereits geöffnetem GUI Fenster geplottet, sondern öffnet alleine für diesen Plot das selbe Fenster mit dem Plot, jedoch ohne die restlichen Daten?
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.