Ich versuche, Argumente an eine von GUIDE generierte GUI zu übergeben. Dies funktioniert aber löst eine Warnung aus.Warnung beim Übergeben von Argumenten an eine GUIDE-GUI
inputTest('Passed In String')
Achtung: Die Eingabe in STR2FUNC "Bestanden In String" ist keine gültigen Funktionsnamen. Dies wird zu einem Fehler in einer zukünftigen Version führen.
Ich weiß, dass ich in der Vergangenheit Argumente an GUIDE-GUIs übergeben habe und ich kann mich nicht erinnern, diese Warnmeldung jemals zuvor gesehen zu haben. Wie auch immer, ich bin relativ neu in Matlab 2016b, so dass sich etwas verändert haben könnte, was mir nicht bewusst ist. Ich habe nichts in der Dokumentation gefunden.
Die Warnung tritt im automatisch generierten Abschnitt "Initialisierungscode - NICHT BEARBEITEN" auf und tritt nur auf, wenn ein optionales Argument übergeben wird.
Ist das ein Fehler in 2016b oder habe ich etwas verpasst?
Minimal Beispiel unten. Es ist eine einfache GUI mit nur einem einzigen Bearbeitungsfeld.
function varargout = inputTest(varargin)
% Begin initialization code - DO NOT EDIT
gui_Singleton = 1;
gui_State = struct('gui_Name', mfilename, ...
'gui_Singleton', gui_Singleton, ...
'gui_OpeningFcn', @inputTest_OpeningFcn, ...
'gui_OutputFcn', @inputTest_OutputFcn, ...
'gui_LayoutFcn', [] , ...
'gui_Callback', []);
if nargin && ischar(varargin{1})
gui_State.gui_Callback = str2func(varargin{1}); % WARNING OCCURS HERE
end
if nargout
[varargout{1:nargout}] = gui_mainfcn(gui_State, varargin{:});
else
gui_mainfcn(gui_State, varargin{:});
end
% End initialization code - DO NOT EDIT
function inputTest_OpeningFcn(hObject, eventdata, handles, varargin)
handles.output = hObject;
% Fill the box if the string is passed in.
if nargin == 4
handles.edit1.String = varargin{1};
else
handles.edit1.String = 'Nothing Passed In';
end
guidata(hObject, handles);
function varargout = inputTest_OutputFcn(hObject, eventdata, handles)
varargout{1} = handles.output;
function edit1_Callback(hObject, eventdata, handles)
function edit1_CreateFcn(hObject, eventdata, handles)
if ispc && isequal(get(hObject,'BackgroundColor'), get(0,'defaultUicontrolBackgroundColor'))
set(hObject,'BackgroundColor','white');
end
Das erinnerte mich daran, wie ich das Problem vorher bearbeitet habe. Ich habe eine meiner älteren GUIDE-basierten GUIs ausgegraben, um dies zu bestätigen. In der Vergangenheit war meine Eingabe in eine GUI ein Zellen-Array. Auf diese Weise wird der 'str2fun'-Aufruf umgangen, da es kein' char' ist und die Eingabe immer noch als varargin {1} im OpeningFcn zur Verwendung angezeigt wird, wie Sie es für richtig halten. –