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

handles an function übergeben. wie?

 

Gorubasu

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 02.03.2016, 16:23     Titel: handles an function übergeben. wie?
  Antworten mit Zitat      
Folgender Code funktioniert, wenn ich auf den Button Default(pb_default)drücke.

Code:
function pb_default_Callback(hObject, eventdata, handles)
% hObject    handle to pb_default (see GCBO)
% eventdata  reserved - to be defined in a future version of MATLAB
% handles    structure with handles and user data (see GUIDATA)

handles = guidata(hObject);

% Camera reset
handles.src.AutoTargetBrightness = 0.501960784313725;
...
handles.src.TriggerDelay = 0;
triggerconfig(handles.vid,'manual');

% GUI parameter reset
set(handles.e_exposure,'String',handles.src.ExposureTime);
...
set(handles.e_repeat,'String',handles.vid.TriggerRepeat+1);
set(handles.pm_triggertype,'Value',1);

% GUI Information reset
set(handles.tx_44,'String',num2str(((handles.vid.TriggerRepeat)+1)*(handles.vid.FramesPerTrigger)))
set(handles.tx_66,'String',handles.vid.TriggerType);

% update handles
guidata(hObject, handles);


Ich möchte aber, dass genau der selbe Code nicht nur ausgeführt wird, wenn ich auf den Button drücke, sondern auch wenn die Gui geöffnet wird und an anderen Stellen des Programmcodes auch. Heißt für mich ergo, den code in eine function packen und diese dann ausführen..... z.B. so


Code:

function KameraGUI_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 KameraGUI (see VARARGIN)
default()
...


function pb_default_Callback(hObject, eventdata, handles)
% hObject    handle to pb_default (see GCBO)
% eventdata  reserved - to be defined in a future version of MATLAB
% handles    structure with handles and user data (see GUIDATA)
default()



function default(hObject)

handles = guidata(hObject);

% Camera reset
handles.src.AutoTargetBrightness = 0.501960784313725;
...
handles.src.TriggerDelay = 0;
triggerconfig(handles.vid,'manual');

% GUI parameter reset
set(handles.e_exposure,'String',handles.src.ExposureTime);
...
set(handles.e_repeat,'String',handles.vid.TriggerRepeat+1);
set(handles.pm_triggertype,'Value',1);

% GUI Information reset
set(handles.tx_44,'String',num2str(((handles.vid.TriggerRepeat)+1)*(handles.vid.FramesPerTrigger)))
set(handles.tx_66,'String',handles.vid.TriggerType);

% update handles
guidata(hObject, handles);


Aber es kommt dann immer folgende Fehlermeldung....

Not enough input arguments.

Error in KameraGUI>default (line 1272)
handles = guidata(hObject);

Error in KameraGUI>pb_default_Callback (line 1268)
default();

Error in gui_mainfcn (line 95)
feval(varargin{:});

Error in KameraGUI (line 44)
gui_mainfcn(gui_State, varargin{:});

Error in
matlab.graphics.internal.figfile.FigFile/read>@(hObject,eventdata)KameraGUI('pb_default_Callback',hObject,eventdata,guidata(hObject))
Error while evaluating UIControl Callback



Ich nehme an, das damit beim Aufruf von der function default() in function pb_default_Callback(...) gemeint ist, dass ich der function default() parameter mit übergeben soll. Wie ich das mit eigenen Variablen mache ok, weiß ich, aber wie übergebe ich das handle?

Im internet finde ich keine Lösung zu genau dem Problem.


Harald
Forum-Meister

Forum-Meister


Beiträge: 24.501
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 02.03.2016, 16:40     Titel:
  Antworten mit Zitat      
Hallo,

ich würde sagen:
Code:
default(hObject)


Grüße,
Harald
Private Nachricht senden Benutzer-Profile anzeigen
 
Jan S
Moderator

Moderator


Beiträge: 11.057
Anmeldedatum: 08.07.10
Wohnort: Heidelberg
Version: 2009a, 2016b
     Beitrag Verfasst am: 02.03.2016, 16:46     Titel: Re: handles an function übergeben. wie?
  Antworten mit Zitat      
Hallo Gorubasu,

Die Funktion "default" erwartet einen Input. Wie die Fehlermeldung bereits sagt, fehlt dieser Input beim Aufruf:
Code:
function KameraGUI_OpeningFcn(hObject, eventdata, handles, varargin)
default(hObject)
...

function pb_default_Callback(hObject, eventdata, handles)
default(hObject)
...

function default(hObject)
handles = guidata(hObject);
...

Das Einfügen von hObject war's also bereits.
Es wird dabei der Handle irgendeines Objects im Figure benötigt.

Gruß, Jan
Private Nachricht senden Benutzer-Profile anzeigen
 
Gorubasu

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 02.03.2016, 17:30     Titel:
  Antworten mit Zitat      
ja klappt manchmal sieht man den wald vor lauter Bäumen nicht. Ich habe immer handles und sowas probiert.. Jetzt ist dafür ein anderes Problem aufgetaucht, was mir unerklärlich ist. Folgende Zeile macht Probleme
triggerconfig(handles.vid,'manual');

In der Form geht alles glatt

Code:
function KameraGUI_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 KameraGUI (see VARARGIN)

% Choose default command line output for KameraGUI
handles.vid=videoinput('gentl', 1, 'Mono8');
handles.src=getselectedsource(handles.vid);
% default(hObject);
triggerconfig(handles.vid,'manual');
set(handles.tx_66,'String',handles.vid.TriggerType);
guidata(hObject, handles);


Aber so machts probleme. Wieso? ist doch dasselbe

Code:
function KameraGUI_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 KameraGUI (see VARARGIN)

% Choose default command line output for KameraGUI
handles.vid=videoinput('gentl', 1, 'Mono8');
handles.src=getselectedsource(handles.vid);
default(hObject);
% triggerconfig(handles.vid,'manual');
% set(handles.tx_66,'String',handles.vid.TriggerType);
guidata(hObject, handles);

function default(hObject)
handles = guidata(hObject);
triggerconfig(handles.vid,'manual');
set(handles.tx_66,'String',handles.vid.TriggerType);
guidata(hObject, handles);



Error in KameraGUI>default (line 1244)
triggerconfig(handles.vid,'manual');

Error in KameraGUI>KameraGUI_OpeningFcn (line 75)
default(hObject);

Error in gui_mainfcn (line 220)
feval(gui_State.gui_OpeningFcn, gui_hFigure, [], guidata(gui_hFigure), varargin{:});

Error in KameraGUI (line 44)
gui_mainfcn(gui_State, varargin{:});
 
Jan S
Moderator

Moderator


Beiträge: 11.057
Anmeldedatum: 08.07.10
Wohnort: Heidelberg
Version: 2009a, 2016b
     Beitrag Verfasst am: 02.03.2016, 17:41     Titel:
  Antworten mit Zitat      
Hallo Gorubasu
Code:
function KameraGUI_OpeningFcn(hObject, eventdata, handles, varargin)
% handles: Struct aus den Input-Argumenten
handles.vid = videoinput('gentl', 1, 'Mono8');
handles.src = getselectedsource(handles.vid);
% handles wurde geändert, aber noch nicht im GUI gespeichert.
default(hObject);
% default() holt sich handles wieder aus dem GUI, in dem die Änderungen des Feldes .vid aber noch nicht eingetragen worden sind.

% Jetzt erst wird handles im GUI gespeichert:
guidata(hObject, handles);

function default(hObject)
% Jetzt wird handles aus dem GUI ausgelesen:
handles = guidata(hObject);

triggerconfig(handles.vid,'manual');

% Jetzt wird handels wieder im GUI gespeichert, obwohl nichts geändert wurde:
guidata(hObject, handles);

Ich habe mal Kommentare im Code eingefügt. Beim handles-Struct in den Inputs bin ich mir nie sicher, ob es der handles Struct ist, der während der Erstellung des GUIs existierte, oder ob Änderungen dort auch enthalten sind. Ich vermute ersteres - ich arbeite aber grundsätzlich nicht mit GUIDE. Sicher wäre dieses Vorgehen:


Code:
function KameraGUI_OpeningFcn(hObject, eventdata, varargin)
% handles niemals in den Inputs übergeben, sondern immer dynamisch erhalten:
handles = guidata(hObject);

% handles wird geändert:
handles.vid = videoinput('gentl', 1, 'Mono8');
handles.src = getselectedsource(handles.vid);

% Abspeichern:
guidata(hObject, handles);

% Jetzt bekommt die Unterfunktion die aktuellen handles Daten aus dem GUI
default(hObject);

function default(hObject)
handles = guidata(hObject);
triggerconfig(handles.vid,'manual');
 


Gruß, Jan
Private Nachricht senden Benutzer-Profile anzeigen
 
Gorubasu

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 02.03.2016, 18:22     Titel:
  Antworten mit Zitat      
Danke Jan, das ist es gewesen
 
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 - 2025 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.