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

H must be the handle to a figure or figure descendent.

 

Chicichi
Forum-Anfänger

Forum-Anfänger


Beiträge: 27
Anmeldedatum: 15.02.18
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 23.02.2018, 12:20     Titel: H must be the handle to a figure or figure descendent.
  Antworten mit Zitat      
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);

% 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);

% Choose default command line output for GUI_INKA_Vergleich
handles.output = hObject;

% Update handles structure
guidata(hObject, handles);

% UIWAIT makes GUI_INKA_Vergleich wait for user response (see UIRESUME)
% uiwait(handles.figure1);


% --- Outputs from this function are returned to the command line.
function varargout = 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)

line 87  % 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

switch get(handles.popupmenu1,'Value')
   
    % Zwei Messungen werden eingelesen
    case 1
       
        % 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
        if isequal(name,0)
            disp('Keine Datei ausgewählt.')
            return
        end
        if isa(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.078 0.338 0.62],'FaceColor',[0.078 0.338 0.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)
       
        % Plot: Geschwindigkeit
        % axes1 wird angesprochen
        xli = X_Lim(z1, z2);
        cla(handles.axes1)
        axes(handles.axes1);
        i=strcmp('V_can', fields);
        ii=find(i==1);
        plot1(z1, z2, fields, ii, xli);
       
        % Ges1 und Ges1 in den Listboxen 2 und 3 anzeigen lassen
        set(handles.listbox2, 'String', Ges1(:,1));
        set(handles.listbox2,'Value', 1);
        set(handles.listbox3, 'String', Ges2(:,1));
        set(handles.listbox3,'Value', 1);
       
        % Axis 2 und 3 und die dazugehöhrigen Titel reseten
        cla(handles.axes2)
        cla(handles.axes3)
        title(handles.axes2, '')
        title(handles.axes3, '')
       
        % Variablen speichern
        setappdata(0, 'z1', z1);
        setappdata(0, 'z2', z2);
        setappdata(0, 'fields', fields);
        setappdata(0, 'Ges1', Ges1);
        setappdata(0, 'Ges2', Ges2);
        setappdata(0, 'xli', xli);
       
        % Einstellungen speichern und neue Messungen einlesen
    case 2
       
        % Erste Messung austauschen
    case 3
       
        % Zweite Messung austauschen
    case 4
       
end


Und das ist die Fehlermeldung :

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!

Viele Grüße
Chicichi
Private Nachricht senden Benutzer-Profile anzeigen


Harald
Forum-Meister

Forum-Meister


Beiträge: 24.448
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 23.02.2018, 12:39     Titel:
  Antworten mit Zitat      
Hallo,

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.

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

Forum-Anfänger

Forum-Anfänger


Beiträge: 27
Anmeldedatum: 15.02.18
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 23.02.2018, 13:20     Titel:
  Antworten mit Zitat      
Hallo Harald,

danke für deine Antwort.

Ja, das ist die komplette Fehlermeldung.

In der Funktion Load_I() möchte ich einfach einen im Current Folder gespeichertes Cell Array laden. Eventuell ist ja dort der Fehler.

Code:
function Inf= Load_I()
    Inf = load ('Info');
end


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?

Chicichi
Private Nachricht senden Benutzer-Profile anzeigen
 
Harald
Forum-Meister

Forum-Meister


Beiträge: 24.448
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 23.02.2018, 14:17     Titel:
  Antworten mit Zitat      
Hallo,

kann ich so nicht nachvollziehen. Da bräuchte ich ein reproduzierbares Beispiel (.m + .fig).

Bei GUIs und Graphik-Befehlen würde ich generell immer das Handle angeben, also z.B.
Code:
plot(handles.axes1, ...)


Grüße,
Harald
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.