Verfasst am: 02.03.2016, 16:23
Titel: handles an function übergeben. wie?
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)
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()
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.
Das Einfügen von hObject war's also bereits.
Es wird dabei der Handle irgendeines Objects im Figure benötigt.
Gruß, Jan
Gorubasu
Gast
Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
Verfasst am: 02.03.2016, 17:30
Titel:
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);
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);
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);
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.