uicontrol 回调函数输入参数过多

Posted

技术标签:

【中文标题】uicontrol 回调函数输入参数过多【英文标题】:uicontrol callback function too many input arguments 【发布时间】:2015-11-13 18:46:56 【问题描述】:

我的目标是从uicontrol 文本框中获取用户的输入,对输入进行操作,然后将输出显示到另一个文本框。 MATLAB 给了我错误:

Error using
UnitConverter/lbs2kg
Too many input arguments.

Error in
UnitConverter>@(varargin)app.lbs2kg(varargin:)
(line 22)
                'Callback',@app.lbs2kg,'String',app.inputMass); 
Error while evaluating UIControl Callback

这是我的代码:

classdef UnitConverter < handle


    properties
        Figure                  % Graphics handles
        DispInputMass
        DispOutputMass

        inputMass               %Variables/Class Properties
        outputMass 
    end


    methods

        function app = UnitConverter
            % This is the "constructor" for the class
            % It runs when an object of this class is created
            app.Figure = figure('Name','Unit Converter') ;

            app.DispInputMass = uicontrol('Style','edit',...
                'Callback',@app.lbs2kg,'String',app.inputMass);

            app.DispOutputMass = uicontrol(app.Figure,'Style','edit','Position'...
                 ,[168 100 47 26],'String','kg');
        end



        function lbs2kg(app,evt)
            app.inputMass = get(app.DispInputMass,'string');
            app.outputMass = app.inputMass*.453;
            set(app.DispOutputMass,'string',app.outputMass);
        end


    end
end

【问题讨论】:

【参考方案1】:

回调方法实际上有 3 个输入 - MATLAB 抛出此错误,因为它试图将三个输入发送到您的回调,该回调被写入仅接受 2。这 3 个输入(按顺序)是:主对象 (app) ,发送事件的对象(uicontrol)和事件(matlab.ui.eventdata.ActionData)。

您可以将代码更改为以下代码以使其工作:

function lbs2kg(app, obj, evt)
    app.inputMass = get(app.DispInputMass,'string');
    app.outputMass = app.inputMass*.453;
    set(app.DispOutputMass,'string',app.outputMass);
end

此外,您可以将函数的第一行更改为以下内容:

function lbs2kg(varargin)

在回调的第一行断点代码并检查 varargin 的内容。有关 varargin 的更多帮助,请参见此处 (http://www.mathworks.com/help/matlab/ref/varargin.html)

【讨论】:

太棒了!感谢您的帮助!

以上是关于uicontrol 回调函数输入参数过多的主要内容,如果未能解决你的问题,请参考以下文章

有没有办法将 uicontrol 回调函数的输出关联到它自己的“用户数据”?

matlab中无法调用uicontrol按钮的回调

文本句柄 uicontrol 在回调函数中未正确更新

如何从matlab中用户定义的函数返回一个值,该函数的回调在uicontrol中指定

解决回调地狱问题

基于PROMISE解决回调地狱问题