【问题标题】:Warning when passing arguments to a GUIDE GUI将参数传递给 GUIDE GUI 时出现警告
【发布时间】:2017-12-08 01:16:41
【问题描述】:

我正在尝试将参数传递给 GUIDE 生成的 GUI。这可行,但会引发警告。

inputTest('Passed In String')

警告:STR2FUNC“传入字符串”的输入无效 函数名。这将在未来的版本中产生错误。

我知道我过去曾将参数传递给 GUIDE GUI,但我不记得以前曾看到过此警告消息。但是,我对 Matlab 2016b 比较陌生,所以我可能不知道发生了一些变化。我在文档中没有找到任何内容。

警告出现在“初始化代码 - 请勿编辑”自动生成的部分中,并且仅在传入可选参数时发生。

这是 2016b 中的错误还是我错过了什么?

下面的最小示例。它是一个简单的 GUI,只有一个编辑框。

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

【问题讨论】:

    标签: matlab matlab-guide


    【解决方案1】:

    自动生成的内联文档中解释了默认的 GUIDE GUI 行为:

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

    您尝试使用的语法是保留用于调用 GUI 本地回调的语法,这就是它在第一个输入上使用 str2func 调用的原因。删除 str2func 调用或更改输入语法以接受不同于 GUIDE 设计用途的单独输出。

    【讨论】:

    • 这让我想起了我之前是如何解决这个问题的。我挖出了一个基于 GUIDE 的旧 GUI 来确认。过去,我对 GUI 的输入是一个元胞数组。这样做会绕过str2fun 调用,因为它不是char,并且输入仍将在OpeningFcn 中显示为varargin{1},以供您随意使用。
    猜你喜欢
    • 2019-04-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-10-21
    • 1970-01-01
    • 1970-01-01
    • 2013-07-24
    • 1970-01-01
    相关资源
    最近更新 更多