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

class method als callback aufrufen

 

MatLabNooB
Forum-Guru

Forum-Guru


Beiträge: 262
Anmeldedatum: 27.03.09
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 12.08.2011, 19:09     Titel: class method als callback aufrufen
  Antworten mit Zitat      
Hallo,

ich habe eine klasse definiert und dieser methoden hinzugefügt. Jetzt würde ich gerne auf die Klassenmethode 'unit_conversion_factors' zugreifen. Leider erzeugt Matlab lauter Fehlermeldung, wie mach ich es richtig?

im = Instanz meiner Klasse
Code:
hContextmenu = uicontextmenu;
uimenu(hContextmenu,...
    'Label', 'Adjust Units',...
    'Callback', unit_conversion_factors(im))

Code:
hContextmenu = uicontextmenu;
uimenu(hContextmenu,...
    'Label', 'Adjust Units',...
    'Callback', im.unit_conversion_factors)

Code:
hContextmenu = uicontextmenu;
uimenu(hContextmenu,...
    'Label', 'Adjust Units',...
    'Callback', @im.unit_conversion_factors)
Private Nachricht senden Benutzer-Profile anzeigen


Harald
Forum-Meister

Forum-Meister


Beiträge: 24.492
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 12.08.2011, 19:33     Titel:
  Antworten mit Zitat      
Hallo,

wie immer wäre es hilfreich, die Fehlermeldungen zu sehen.

Ein Problem wird sicher sein, dass die Callbacks immer mit Argumenten aufgerufen werden, und dass diese Argumente mit den erwarteten deiner Klassenmethode (sofern diese überhaupt Argumente annimmt) nicht zusammenpasst.

Falls dir das nicht weiterhilft: wie ist die Deklarationszeile der Methode?
Woher sollen eventuelle zusätzliche Eingabeargumente kommen?

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

Forum-Guru

Forum-Guru


Beiträge: 262
Anmeldedatum: 27.03.09
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 12.08.2011, 19:55     Titel:
  Antworten mit Zitat      
also die methode sieht etwa so aus, also die methode soll keine speziellen argumente übernehmen, nur ausgeführt werden, wenn ich im Contextmenu den entsprechenden Callback abfeuer...

Code:
classdef RawMovieClass < handle
    methods (Access = public)
    % constructor
           function obj = RawMovieClass(input)
              % code
           end % function

           function unit_conversion_factors(obj)
              % code
           end % function
     end % methods
end % classdef


Code:

??? Error using ==>
unit_conversion_factors
Too many output arguments.


hatte auch schon mit Varianten von varargin und varargout probiert, aber sitz voll auf dem Schlauch
Private Nachricht senden Benutzer-Profile anzeigen
 
Harald
Forum-Meister

Forum-Meister


Beiträge: 24.492
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 12.08.2011, 20:08     Titel:
  Antworten mit Zitat      
Hallo,

mich erstaunt, dass die Meldung auf die Outputs bezogen ist. Ich hätte vermutet, dass sie auf die Inputs bezogen ist. Vielleicht hilft auch der Debugger?
Zwei Vorschläge:
Code:
@(varargin) im.unit_conversion_factors

oder
Code:
'im.unit_conversion_factors'


Ob die Methode als Methode auf das Objekt angewendet wird oder als Funktion mit Objekt als Input aufgerufen wird, sollte keinen Unterschied machen.

Wenn das nicht funktioniert, würde ich den Callback mal in einer separate (Sub oder nested) Function schreiben und dort mit dem Debugger reingehen und NARGIN und NARGOUT überprüfen.

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

Forum-Guru

Forum-Guru


Beiträge: 262
Anmeldedatum: 27.03.09
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 12.08.2011, 20:25     Titel:
  Antworten mit Zitat      
Code:
uimenu(hContextmenu,...
    'Label', 'Adjust Units',...
    'Callback', @(varargin)im.unit_conversion_factors)


hat funktioniert, hab vielen Dank! Muss das aber noch mal für mich selbst verstehen, was da schiefläuft, bin grad vom rumtesten bisschen Matsch in der Birne...

gruß
Private Nachricht senden Benutzer-Profile anzeigen
 
Harald
Forum-Meister

Forum-Meister


Beiträge: 24.492
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 13.08.2011, 09:52     Titel:
  Antworten mit Zitat      
Hallo,

der GUI-Mechanismus ruft den Callback mit (ich denke zwei) Input-Argumenten auf. Deine Methode nimmt aber keine (zusätzlichen) Input-Argumente entgegen.
Über das anonymous function handle kannst du das Funktions-Interface anpassen. Mein Vorschlag nimmt also varargin (= alle Input-Argumente) entgegen, damit der Aufruf mit Argumenten möglich ist, und verwendet sie einfach nicht weiter.

Grüße,
Harald
Private Nachricht senden Benutzer-Profile anzeigen
 
godi
Forum-Fortgeschrittener

Forum-Fortgeschrittener


Beiträge: 52
Anmeldedatum: 25.05.11
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 18.08.2011, 07:29     Titel:
  Antworten mit Zitat      
Hallo!

Die Callback Methode benötigt 3 Input Argumente:
Zum einen das Objekt selbst, dann das Handle des GUI Elements und noch ein Eventobjekt.

Code:

'Callback', @(src,evnt)obj.otherObj.myMethod);
 


So kannst du auch Methoden aus anderen Klassen aufrufen wenn du ein Objekt instanziert hast.

godi
Private Nachricht senden Benutzer-Profile anzeigen
 
MatLabNooB
Themenstarter

Forum-Guru

Forum-Guru


Beiträge: 262
Anmeldedatum: 27.03.09
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 20.08.2011, 22:38     Titel:
  Antworten mit Zitat      
dank euch für die Erklärungen, bin grad erst dabei mich in OOP einzuarbeiten, und mit anonymous function handles und Weitergabe von Variablen steh ich sowieso permanent auf Kriegsfuss Smile
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.