2017-12-08 3 views
0

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 

Antwort

1

Der Standard GUIDE GUI Verhalten wird in der automatisch generierten Inline-Dokumentation erläutert:

% ASDF MATLAB code for asdf.fig 
%  ASDF, by itself, creates a new ASDF or raises the existing 
%  singleton*. 
% 
%  H = ASDF returns the handle to a new ASDF or the handle to 
%  the existing singleton*. 
% 
%  ASDF('CALLBACK',hObject,eventData,handles,...) calls the local 
%  function named CALLBACK in ASDF.M with the given input arguments. 
% 
%  ASDF('Property','Value',...) creates a new ASDF or raises the 
%  existing singleton*. Starting from the left, property value pairs are 
%  applied to the GUI before asdf_OpeningFcn gets called. An 
%  unrecognized property name or invalid value makes property application 
%  stop. All inputs are passed to asdf_OpeningFcn via varargin. 

Die Syntax Sie die Syntax für den Aufruf Rückrufe, die lokal für Ihre GUI reserviert zu verwenden sind versucht ist, die Deshalb verwendet es einen str2func Aufruf am ersten Eingang. Entfernen Sie entweder den Aufruf str2func oder ändern Sie die Eingabesyntax, um eine separate Ausgabe zu akzeptieren, für die GUIDE nicht vorgesehen ist.

+0

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. –

Verwandte Themen